OpenCV:在Python中将NumPy转换为IplImage

8

我有一张图片,使用cv2.imread()加载后返回一个NumPy数组。然而,我需要将其传递给需要IplImage格式数据的第三方API。

我已经搜索了所有可能的资料,发现可以从IplImage转换为CvMat,并且在C++中也有相关的转换参考,但是在Python中从NumPy到IplImage的转换方法尚未找到。是否提供了可以完成此转换的函数?


使用Numpy的cvMat可以吗? - Abid Rahman K
2个回答

15

你可以这样做。

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


谢谢Froyo,这让我得到了一个IplImage,但图像似乎已经损坏。我没有使用cv.CreateImageHeader和cv.SetData,而是使用了cv2.cv.CreateImageHearder和cv2.cv.SetData,你认为这会有区别吗? - steve8918
3
实际上,我弄清楚了,我尝试转换的瓷砖是二进制的,而不是BGR,这就是为什么它会出现损坏的原因。所以我把3改成1,然后它就完美地工作了。再次感谢您指引我正确的方向。如果有其他人需要,OpenCV Cookbook中有关于如何进行转换的信息,请参见http://opencv.willowgarage.com/wiki/PythonInterface/。 - steve8918

0

两种应用方法:

  1. img = cv2.imread(img_path) img_buf = cv2.imencode('.jpg', img)[1].tostring()

  2. 只需读取图像文件: img_buf = open(img_path, 'rb').read()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接