在Stitcher类中将composePanorama与OpenCV-Python绑定一起使用

时间:2019-01-22 18:21:02

标签: python opencv-python opencv-stitching

我正在尝试估计某些图像的变换并在Python中使用stitcher.estimateTransform()stitcher.composePanorama()进行拼接。估计转换后,composePanorama给出以下错误:

  

pano不是numpy数组,也不是标量

我尝试使用cv2.fromarray(left)将NumPy数组转换为Mat对象,但它仅适用于cv,不适用于cv2。因此,如何在Cv2中将此numpy转换为MAT数组。我找不到将composePanorama与python绑定结合使用的任何示例。对于此错误的任何解决方案或将stitcher.estimateTransform()与OpenCV-Python绑定一起使用的示例,将不胜感激。

注意:尽管OpenCV-Python绑定中的Stitching类不完整(由于自动生成的绑定),但help(cv2.createStitcher())证明它包含composePanorama()和{{1 }}。

注意:我可以毫无问题地使用estimateTransform(),但是使用stitcher.stitch()并没有帮助,因为我试图不计算每次迭代中的变换主循环。

我的简单代码:

stitcher.stitch()

2 个答案:

答案 0 :(得分:1)

我有同样的问题。据我所知,composePanorama有两个重载。

CV_WRAP Status composePanorama(OutputArray pano);
Status composePanorama(InputArrayOfArrays images, OutputArray pano);

这是我们需要的第二个重载,因为pano是一个输出参数,在Python中将其作为返回值给出。不幸的是,第二个重载没有用CV_WRAP标记,这将使其可用于Python绑定。因此,我只能看到的解决方案是:

  • 使用替代的缝合方式
  • 浏览缺少的composePanorama实现的C ++代码,然后在Python中自己重新实现
  • 在Open CV Github上注册问题,然后等待更新
  • 从源代码自己构建Open CV,并将功能标记为CV_WRAP(我不确定它是否真的那么简单)
  • 使用C ++而不是Python

尽管我会很高兴其他人可以发布答案,说明如何在Python中完成此任务而无需完成上面的复杂任务。

答案 1 :(得分:1)

要使用stitcher.estimateTransform()stitcher.composePanorama(),您将需要

  1. 下载opencv https://github.com/opencv/opencv
  2. 导航到opencv-master / modules / stitching / include / opencv2 / stitching.hpp
  3. 在您希望能够在Python中调用的任何方法的前面添加CV_WRAP。在这种情况下,这些值将为estimateTransform和composePanorama

然后构建python模块:

cd ~/opencv
mkdir build
cd build
cmake ../
make
sudo make install

然后将模块从安装位置移动到虚拟环境。在我的情况下是/usr/local/lib/python3.7/site-packages/cv2。

有关更多信息,请参见https://www.pyimagesearch.com/2018/08/17/install-opencv-4-on-macos/https://docs.opencv.org/4.1.0/da/d49/tutorial_py_bindings_basics.htmlhttps://docs.opencv.org/4.1.1/da/df6/tutorial_py_table_of_contents_setup.html