2013-07-31 69 views
14

Tôi đang làm việc với PyOpenCV. Làm thế nào để chuyển đổi hình ảnh cv2 (numpy) thành chuỗi nhị phân để ghi vào MySQL db mà không cần tệp tạm thời và imwrite?Python OpenCV chuyển đổi hình ảnh thành chuỗi byte?

Tôi google nó nhưng không tìm thấy gì ...

Tôi đang cố gắng imencode, nhưng nó không làm việc

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())) 

Lỗi:

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

Trợ giúp ai đó!

Trả lời

3

capture.read() trả về một tuple, (err, img).

thử tách nó lên:

_,img = capture.read() 
self.wfile.write(cv2.imencode('png', img)) 
+0

nó trả về (Đúng, mảng ([[137], [80], [78], ..., [66], [96], [130]], dtype = uint8)), nhưng không phải byte string – xercool

+0

Làm thế nào để chuyển đổi chuỗi đó thành chuỗi byte? – xercool

+1

giải pháp của tôi là 'self.wfile.write (numpy.array (cv2.imencode ('. Png', img) [1]). Tostring())' – xercool

1

Mã của tôi để sử dụng opencv với 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()) 
25

Nếu bạn có một hình ảnh img (mà là một mảng NumPy), bạn có thể chuyển đổi nó thành chuỗi sử dụng:

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

Bây giờ bạn có thể dễ dàng lưu trữ hình ảnh bên trong cơ sở dữ liệu và thứ en phục hồi nó bằng cách sử dụng:

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

nơi bạn cần phải thay thế STRING_FROM_DATABASE với biến chứa kết quả của truy vấn của bạn đến cơ sở dữ liệu có chứa các hình ảnh.

Các vấn đề liên quan