2012-07-17 13 views
7

Ho un'immagine che carico utilizzando cv2.imread(). Questo restituisce un array NumPy. Tuttavia, ho bisogno di passare questo in un'API di terze parti che richiede i dati nel formato IplImage.OpenCV: conversione da NumPy a IplImage in Python

Ho setacciato tutto ciò che potevo e ho trovato istanze di conversione da IplImage a CvMat, e ho trovato alcuni riferimenti alla conversione in C++, ma non da NumPy a IplImage in Python. C'è una funzione che può fare questa conversione?

+0

Va bene con Numpy -> cvMat? –

risposta

14

Si può fare così.

source = cv2.imread() # source is numpy array 
bitmap = cv.CreateImageHeader((source.shape[1], source.shape[0]), cv.IPL_DEPTH_8U, 3) 
cv.SetData(bitmap, source.tostring(), 
      source.dtype.itemsize * 3 * source.shape[1]) 

bitmap qui è cv2.cv.iplimage

+0

Grazie Froyo, questo mi ottiene un IplImage, ma l'immagine sembra essere corrotta. Invece di usare cv.CreateImageHeader e cv.SetData, sto usando cv2.cv.CreateImageHearder e cv2.cv.SetData, pensi che faccia la differenza? – steve8918

+3

In realtà l'ho capito, la piastrella che stavo cercando di convertire era binaria, non BGR, ecco perché si stava corrompendo. Così ho cambiato 3 a 1 e ha funzionato perfettamente. Grazie ancora per avermi indicato nella giusta direzione. Nel caso in cui qualcun altro ne abbia bisogno, il Cookbook OpenCV ha informazioni su come convertire su http://opencv.willowgarage.com/wiki/PythonInterface/ – steve8918