2012-11-11 26 views
12

बस मेमोरी बफर या यूआरएल से ओपनसीवी छवि ऑब्जेक्ट को प्रदर्शन में सुधार करने के लिए एक रास्ता साझा करें।मेमोरी बफर (स्ट्रिंगियो) में या ओपनसीवी पायथन लाइब्रेरी के साथ यूआरएल से छवि को कैसे पढ़ा जाए

कभी कभी हम यूआरएल से छवि द्विआधारी मिलता है, अतिरिक्त फ़ाइल आईओ से बचने के लिए, हम स्मृति बफर में से या यूआरएल से imread इस छवि चाहते हैं, लेकिन imread केवल पथ के साथ फाइल सिस्टम से पढ़ने के लिए छवि का समर्थन करता है।

उत्तर

26

स्मृति बफर (StringIO) में, हम OpenCV एपीआई imdecode उपयोग कर सकते हैं के साथ एक OpenCV छवि वस्तु बनाने के लिए, को देखने के लिए नीचे दिए गए कोड:

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

वापसी नहीं करता है, तो छवि डिकोड नहीं किया जा सकता है। मुझे स्ट्रिंग की शुरुआत से 'डेटा: छवि/पीएनजी; बेस 64,' को निकालना था जो डीकोडिंग से ओपनसीवी को रोक रहा था। –

+0

दूसरा जवाब मैंने इस तरह देखा है लेकिन यह मेरे लिए काम नहीं कर रहा है। मुझे विश्वास नहीं है कि यह यूआरएल से ओपन-सीवी – CashCow

+0

इमेड में एक छवि लोड करने में ऐसी समस्या हो सकती है, मुझे एक 'टाइप एरर: अपेक्षित स्ट्रिंग या यूनिकोड ऑब्जेक्ट, numpy.ndarray मिली' त्रुटि देता है। – raincrash