2012-07-17 313 views
7

我有一张使用cv2.imread()加载的图像。这将返回一个NumPy数组。不过,我需要将它传递给需要IplImage格式数据的第三方API。OpenCV:在Python中从NumPy转换为IplImage

我已经找遍了所有可以找到的东西,并且已经找到了从IplImage转换为CvMat的实例,并且我发现了一些在C++中转换的引用,但不是从NumPy转换为Python中的IplImage。是否提供可以执行此转换的功能?

+0

是不是好与numpy的 - >与CvMat? – 2012-07-17 18:03:47

回答

14

你可以这样做。

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这里是cv2.cv.iplimage

+0

谢谢Froyo,这让我一个IplImage,但图像似乎是腐败的。而不是使用cv.CreateImageHeader和cv.SetData,我使用cv2.cv.CreateImageHearder和cv2.cv.SetData,你认为这有所作为? – steve8918 2012-07-17 23:22:16

+3

其实我想通了,我试图转换的瓷砖是二元的,而不是BGR,所以这就是为什么它变得腐败。所以我改变了3比1,它完美运作。再次感谢您指引我朝着正确的方向发展。如果有人需要它,OpenCV Cookbook提供了如何在http://opencv.willowgarage.com/wiki/PythonInterface/上转换的信息 – steve8918 2012-07-17 23:26:52