Python OpenCV convertit l'image en byte string?
je travaille avec PyOpenCV. Comment convertir cv2 image (numpy) en chaîne binaire pour écrire à MySQL db sans fichier temporaire et imwrite
?
je suis google mais rien trouvé...
je vais essayer imencode
, mais ça ne fonctionne pas
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()))
Erreur:
File "server.py", line 16, in do_GET
self.wfile.write(cv2.imencode('png', capture.read()))
TypeError: img is not a numerical tuple
Aidez quelqu'un!
20
demandé sur
jabaldonedo
2013-07-31 13:59:36
3 réponses
Si vous avez une image img
(qui est un numpy array) vous pouvez le convertir en chaîne en utilisant:
>>> img_str = cv2.imencode('.jpg', img)[1].tostring()
>>> type(img_str)
'str'
Maintenant vous pouvez facilement stocker l'image dans votre base de données, puis la récupérer en utilisant:
>>> nparr = np.fromstring(STRING_FROM_DATABASE, np.uint8)
>>> img = cv2.imdecode(nparr, cv2.CV_LOAD_IMAGE_COLOR)
où vous devez remplacer STRING_FROM_DATABASE
avec la variable qui contient le résultat de votre requête à la base de données contenant l'image.
40
répondu
jabaldonedo
2017-09-20 13:14:33
capture.read () retourne un tuple, (err,img).
essayez de diviser:
_,img = capture.read()
self.wfile.write(cv2.imencode('png', img))
3
répondu
berak
2013-07-31 12:46:14
mon code pour utiliser opencv avec 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() )
1
répondu
themadmax
2014-05-13 15:09:01