2012-11-11 48 views
12

Chỉ cần chia sẻ cách tạo đối tượng hình ảnh opencv từ bộ nhớ đệm hoặc từ url để cải thiện hiệu suất.Cách đọc hình ảnh từ bộ nhớ đệm (StringIO) hoặc từ url bằng thư viện python opencv

Đôi khi chúng tôi nhận được hình ảnh nhị phân từ url, để tránh thêm tệp IO, chúng tôi muốn imread hình ảnh này từ bộ nhớ đệm hoặc từ url, nhưng chỉ đọc hỗ trợ đọc hình ảnh từ hệ thống tệp có đường dẫn.

Trả lời

26

Để tạo một đối tượng hình ảnh OpenCV với trong bộ nhớ đệm (StringIO), chúng ta có thể sử dụng OpenCV API imdecode, xem mã bên dưới:

import cv2 
import numpy as np 
from urllib2 import urlopen 
from cStringIO import StringIO 

def create_opencv_image_from_stringio(img_stream, cv2_img_flag=0): 
    img_stream.seek(0) 
    img_array = np.asarray(bytearray(img_stream.read()), dtype=np.uint8) 
    return cv2.imdecode(img_array, cv2_img_flag) 

def create_opencv_image_from_url(url, cv2_img_flag=0): 
    request = urlopen(url) 
    img_array = np.asarray(bytearray(request.read()), dtype=np.uint8) 
    return cv2.imdecode(img_array, cv2_img_flag) 
+0

sự trở lại là None nếu hình ảnh không thể được giải mã. Tôi đã phải thêm loại bỏ một 'dữ liệu: hình ảnh/png; base64, 'từ đầu của chuỗi được ngăn chặn opencv từ giải mã. –

+0

Câu trả lời thứ hai Tôi đã thấy như thế này nhưng nó không làm việc cho tôi. Tôi không thể tin rằng nó có thể được như vậy một vấn đề tải một hình ảnh từ một URL vào open-cv – CashCow

+0

imread cho tôi một 'TypeError: chuỗi dự kiến ​​hoặc Unicode đối tượng, numpy.ndarray tìm thấy' lỗi. – raincrash

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