问题描述
我正在使用 PyOpenCV.如何在没有临时文件和 imwrite 的情况下将 cv2 图像(numpy)转换为二进制字符串以写入 MySQL db?
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 but found nothing...
我正在尝试 imencode,但它不起作用.
I'm trying imencode, but it doesn't work.
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
帮助别人!
推荐答案
如果你有一个图像 img(这是一个 numpy 数组),你可以使用以下方法将其转换为字符串:
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)
您需要将 STRING_FROM_DATABASE 替换为包含对包含图像的数据库的查询结果的变量.
where you need to replace STRING_FROM_DATABASE with the variable that contains the result of your query to the database containing the image.