Python OpenCV convert image to byte string?

前端 未结 6 1776
礼貌的吻别
礼貌的吻别 2020-12-02 11:12

I\'m working with PyOpenCV. How to convert cv2 image (numpy) to binary string for writing to MySQL db without a temporary file and imwrite?

I googled it

相关标签:
6条回答
  • 2020-12-02 11:50

    My code to use opencv with python cgi :

        im_data = form['image'].file.read()
        im = cv2.imdecode( np.asarray(bytearray(im_data), dtype=np.uint8), 1 )
        ret, im_thresh = cv2.threshold( im, 128, 255, cv2.THRESH_BINARY )
        self.send_response(200)
        self.send_header("Content-type", "image/jpg")
        self.end_headers()      
        ret, buf = cv2.imencode( '.jpg', im_thresh )
        self.wfile.write( np.array(buf).tostring() )
    
    0 讨论(0)
  • 2020-12-02 11:52

    Here is an example:

    def image_to_bts(frame):
        '''
        :param frame: WxHx3 ndarray
        '''
        _, bts = cv2.imencode('.webp', frame)
        bts = bts.tostring()
        return bts
    
    def bts_to_img(bts):
        '''
        :param bts: results from image_to_bts
        '''
        buff = np.fromstring(bts, np.uint8)
        buff = buff.reshape(1, -1)
        img = cv2.imdecode(buff, cv2.IMREAD_COLOR)
        return img
    
    0 讨论(0)
  • 2020-12-02 11:56
    im = cv2.imread('/tmp/sourcepic.jpeg')
    res, im_png = cv2.imencode('.png', im)
    with open('/tmp/pic.png', 'wb') as f:
        f.write(im_png.tobytes())
    
    0 讨论(0)
  • 2020-12-02 12:03

    capture.read() returns a tuple, (err,img).

    try splitting it up:

    _,img = capture.read()
    self.wfile.write(cv2.imencode('png', img))
    
    0 讨论(0)
  • 2020-12-02 12:03

    It works in 2020 with numpy==1.19.4 and opencv==4.4.0:

    import cv2
    
    cam = cv2.VideoCapture(0)
    
    # get image from web camera
    ret, frame = cam.read()
    
    # convert to jpeg and save in variable
    image_bytes = cv2.imencode('.jpg', frame)[1].tobytes()
    
    0 讨论(0)
  • 2020-12-02 12:13

    If you have an image img (which is a numpy array) you can convert it into string using:

    >>> img_str = cv2.imencode('.jpg', img)[1].tostring()
    >>> type(img_str)
     'str'
    

    Now you can easily store the image inside your database, and then recover it by using:

    >>> nparr = np.fromstring(STRING_FROM_DATABASE, np.uint8)
    >>> img = cv2.imdecode(nparr, cv2.CV_LOAD_IMAGE_COLOR)
    

    where you need to replace STRING_FROM_DATABASE with the variable that contains the result of your query to the database containing the image.

    0 讨论(0)
提交回复
热议问题