2013-06-18 7 views
17

से अजगर OpenCV लोड छवि मैं की तरह पीएचपी समारोह के रूप में imagecreatefromstringबाइट स्ट्रिंग

मुझे लगता है कि कैसे कर सकते हैं स्ट्रिंग से छवि को लोड करने की कोशिश कर रहा हूँ?

मैं MySQL ब्लॉब क्षेत्र छवि है। मैं MySQLdb उपयोग कर रहा हूँ और PyOpenCV में छवियों के साथ काम करने के लिए अस्थायी फ़ाइल बनाने नहीं करना चाहती।

नोट: जरूरत सीवी (नहीं CV2) आवरण समारोह

उत्तर

45

यह वही मैं सामान्य रूप से अजगर में OpenCV छवियों डेटाबेस में संग्रहीत छवियों कन्वर्ट करने के लिए इस्तेमाल करते हैं।

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'> 
+0

वाह! धन्यवाद! मैं Google में खोजता हूं, लेकिन यह नहीं मिला :) – featureoffuture

+0

आपका स्वागत है! याद वोट दें/उत्तर स्वीकार यदि आप पाते हैं यह उपयोगी :) – jabaldonedo

+0

अब मैं नहीं कर सकता है, लेकिन जब मैं मैं कि – featureoffuture

2

मैं एक स्ट्रिंग एक कच्चे बफर युक्त से एक opencv बनाने के लिए इस कोड का उपयोग करने की कोशिश की है (सादा पिक्सेल डेटा) और यह उस असाधारण मामले में काम नहीं करता है।

तो यहाँ कैसे करना है कि इस प्रकार का डेटा के लिए है:

image = np.fromstring(im_str, np.uint8).reshape(h, w, nb_planes) 

(लेकिन हां आप अपनी छवि गुण जानने की जरूरत)

यदि आपका बी और जी चैनल permuted है, यहाँ कैसे करने के लिए इसे ठीक:

image = cv2.cvtColor(image, cv2.cv.CV_BGR2RGB) 
संबंधित मुद्दे