नए OpenCV प्रलेखन here कहते हैं कि आप एक Numpy सरणी सिर्फ इस तरह के लिए एक IplImage परिवर्तित कर सकते हैं:तेजी से रूपांतरण
arr = numpy.asarray(im)
लेकिन यह है कि, मेरी जरूरतों के लिए काम नहीं करता है, क्योंकि यह जाहिरा तौर पर नहीं करता है 'टी समर्थन गणित:
x = arr/0.01
TypeError: unsupported operand type(s) for /: 'cv2.cv.iplimage' and 'float'
अगर मैं डेटा प्रकार निर्दिष्ट करने के लिए प्रयास करते हैं, मैं भी कि नहीं अब तक प्राप्त कर सकते हैं:
arr = numpy.asarray(im, dtype=num.float32)
TypeError: float() argument must be a string or a number
तो मैं पुराने दस्तावेज here में दिए गए कोड का उपयोग कर रहा हूं। असल में, यह इस करता है:
arr = numpy.fromstring(im.tostring(), dtype=numpy.float32)
लेकिन tostring
कॉल वास्तव में धीमी है, शायद इसलिए क्योंकि यह डेटा की प्रतिलिपि है? मुझे इस रूपांतरण की वास्तव में तेज़ी से आवश्यकता है और किसी भी बफर की प्रतिलिपि बनाने की आवश्यकता नहीं है जिसकी आवश्यकता नहीं है। मुझे नहीं लगता कि डेटा स्वाभाविक रूप से असंगत है; मैं अपनी आईपीएल छवि को पहले स्थान पर cv.fromarray
के साथ बना रहा हूं, जो ओपनसीवी कार्यों द्वारा बेहद तेज़ और स्वीकार्य है।
क्या कोई तरीका है कि मैं अपने लिए asarray
विधि का काम कर सकता हूं, या फिर मैं आईपीएलमेज में डेटा पॉइंटर तक सीधे पहुंच प्राप्त कर सकता हूं जिस तरह से numpy.fromstring
इसे स्वीकार करेगा? मैं उबंटू सटीक के लिए ओपनसीवी 2.3.1 प्रीपेक किए गए का उपयोग कर रहा हूं।
ओपनसीवी भारी विकास के तहत है, पाइथन बाइंडिंग भी है। आपको पहले OpenCV 2.4.2 या 2.4.3rc आज़माएं। – ypnos
सवाल मान्य है। OpenCV 'cv' bindgins के लिए पहले से ही कुछ विरासत पायथन कोड है। वे अभी भी ओपनसीवी 2.4.2 के रूप में समर्थित हैं। उन्हें 'cv2' में कनवर्ट करना हमेशा एक विकल्प नहीं हो सकता है। – sastanin