La documentazione più recente OpenCV here dice che si può convertire un IplImage a un array Numpy proprio come questo:veloce conversione di IplImage di serie Numpy
arr = numpy.asarray(im)
ma che non funziona per le mie esigenze, perché a quanto pare doesn 'supporto matematica t:
x = arr/0.01
TypeError: unsupported operand type(s) for /: 'cv2.cv.iplimage' and 'float'
Se provo a specificare il tipo di dati, non posso nemmeno arrivare così lontano:
arr = numpy.asarray(im, dtype=num.float32)
TypeError: float() argument must be a string or a number
Quindi sto utilizzando il codice fornito nella documentazione precedente here. In sostanza, lo fa:
arr = numpy.fromstring(im.tostring(), dtype=numpy.float32)
Ma la chiamata tostring
è molto lento, forse perché è la copia dei dati? Ho bisogno che questa conversione sia molto veloce e non copi nessun buffer di cui non abbia bisogno. Non penso che i dati siano intrinsecamente incompatibili; Sto creando il mio IplImage con cv.fromarray
in primo luogo, che è estremamente veloce e accettato dalle funzioni OpenCV.
C'è un modo per far funzionare il nuovo metodo asarray
per me, oppure posso accedere direttamente al puntatore dati in IplImage in modo che lo numpy.fromstring
lo accetti? Sto usando OpenCV 2.3.1 prepackaged per Ubuntu Precise.
OpenCV è in fase di sviluppo, anche i binding Python. Dovresti prima provare OpenCV 2.4.2 o 2.4.3rc. – ypnos
La domanda è valida. Esiste già un codice Python precedente per i bindgins 'cv' di OpenCV. Sono ancora supportati a partire da OpenCV 2.4.2. Convertirli in 'cv2' potrebbe non essere sempre un'opzione. – sastanin