的Python OpenCV的負荷的形象,我試圖加載從字符串圖像等作爲PHP函數imagecreatefromstring
從字節串
我怎麼能這樣做?
我有MySQL blob字段圖像。我正在使用MySQLdb並且不想創建用於在PyOpenCV中處理圖像的臨時文件。
注:需要CV(不CV2)包裝函數
的Python OpenCV的負荷的形象,我試圖加載從字符串圖像等作爲PHP函數imagecreatefromstring
從字節串
我怎麼能這樣做?
我有MySQL blob字段圖像。我正在使用MySQLdb並且不想創建用於在PyOpenCV中處理圖像的臨時文件。
注:需要CV(不CV2)包裝函數
這是我通常使用轉換存儲在數據庫中的圖像OpenCV的Python中的圖像。
import numpy as np
import cv2
from cv2 import cv
# Load image as string from file/database
fd = open('foo.jpg')
img_str = fd.read()
fd.close()
# CV2
nparr = np.fromstring(img_str, np.uint8)
img_np = cv2.imdecode(nparr, cv2.CV_LOAD_IMAGE_COLOR) # cv2.IMREAD_COLOR in OpenCV 3.1
# CV
img_ipl = cv.CreateImageHeader((img_np.shape[1], img_np.shape[0]), cv.IPL_DEPTH_8U, 3)
cv.SetData(img_ipl, img_np.tostring(), img_np.dtype.itemsize * 3 * img_np.shape[1])
# check types
print type(img_str)
print type(img_np)
print type(img_ipl)
我已經添加了從numpy.ndarray
到cv2.cv.iplimage
轉換,所以上面的腳本會打印:
<type 'str'>
<type 'numpy.ndarray'>
<type 'cv2.cv.iplimage'>
我已經嘗試使用此代碼從包含原始緩衝區的字符串創建的OpenCV (普通像素數據),並不適用於這種特殊情況。
因此,這裏是如何做到這一點對於這種數據:
image = np.fromstring(im_str, np.uint8).reshape(h, w, nb_planes)
(但是是你需要知道你的圖像屬性)
如果你的B和G通道排列,這裏是如何修復它:
image = cv2.cvtColor(image, cv2.cv.CV_BGR2RGB)
哇!謝謝!我在谷歌搜索,但沒有發現:) – featureoffuture
不客氣!記得upvote /接受答案,如果你覺得它有用:) – jabaldonedo
現在我不能,但是當我可以upvote那 – featureoffuture