4 题: Python OpenCV将图像转换为字节串?

在...创建的问题 Thu, Feb 14, 2019 12:00 AM

我正在使用PyOpenCV。如何将cv2映像(numpy)转换为二进制字符串,以便在没有临时文件和imwrite的情况下写入MySQL数据库?

我用Google搜索但没有找到任何内容......

我正在尝试imencode,但它不起作用。

 
capture = cv2.VideoCapture(url.path)
capture.set(cv2.cv.CV_CAP_PROP_POS_MSEC, float(url.query))
self.wfile.write(cv2.imencode('png', capture.read()))

错误:

 
  File "server.py", line 16, in do_GET
  self.wfile.write(cv2.imencode('png', capture.read()))
  TypeError: img is not a numerical tuple

帮助别人!

    
25
4个答案                              4 跨度>                         

如果您有图像img(这是一个numpy数组),您可以使用以下方法将其转换为字符串:

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

现在,您可以轻松地将图像存储在数据库中,然后使用以下命令恢复它:

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

您需要将包含查询结果的变量STRING_FROM_DATABASE替换为包含该图像的数据库。

    
58
2017-09-20 13:14:33Z
  1. 必须使用cv2.imdecode(nparr, cv2.IMREAD_COLOR) for opencv3.0 +
    2019-02-01 08:25:41Z
  2. 醇>

capture.read()返回一个元组,(错误,img)。

尝试拆分:

 
_,img = capture.read()
self.wfile.write(cv2.imencode('png', img))
    
4
2013-07-31 12:46:14Z
  1. 它返回(True,数组([[137],[80],[78],...,[66],[96],[130] ],dtype = uint8)),但不是字节串
    2013-07-31 12:52:57Z
  2. 如何将其转换为字节字符串?
    2013-07-31 12:53:25Z
  3. 我的解决方案是self.wfile.write(numpy.array(cv2.imencode('.png', img)[1]).tostring())
    2013-07-31 13:05:26Z
  4. 醇>

我的代码使用opencv和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() )
    
2
2014-05-13 15:09:01Z
 
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
2019-06-26 13:20:05Z
来源放置 这里