【发布时间】:2016-12-30 19:59:54
【问题描述】:
背景情况
我正在尝试通过 Python 绑定使用 OpenCV Stitching 模块,但出现错误:
import cv2
stitcher = cv2.createStitcher(False)
imageL = cv2.imread("imageL.jpg")
imageC = cv2.imread("imageC.jpg")
imageR = cv2.imread("imageR.jpg")
stitcher.stitch((imageL, imageC))
错误:/home/user/OpenCV3.1.0/opencv/modules/python/src2/cv2.cpp:163:错误:(-215)数据通常应该为NULL!在函数中分配
遭受这种痛苦的类似人:
- https://stackoverflow.com/a/36646256/1253729
- How to stitch images from a UAV using opencv python with Stitcher class
- https://github.com/opencv/opencv/issues/6969
手头的问题
所以我决定使用官方的 C++ OpenCV 拼接示例,并使用 Python 使用 Boost.Python 调用它。但是,我仍然无法弄清楚如何正确使用 Boost.Python + numpy-opencv-converter 来处理 C++ Mat vs Numpy 数组转换。
¿如何调用 numpy-opencv-converter? 我只有 Boost.Python,在运行我的 python 函数来调用 C++ 文件时,我得到了这个(预期)结果:
$ python python_caller.py
Traceback (most recent call last):
File "python_caller.py", line 10, in <module>
visualize(A)
Boost.Python.ArgumentError: Python argument types in
testing.visualize(numpy.ndarray)
did not match C++ signature:
visualize(cv::Mat)
谢谢。
PD:我在 Ubuntu 14.04、Python 2.7.4 中使用从源代码编译的 OpenCV 3.1.0 并在 virtualenv 中。
这些是我正在使用的文件。
testing.cpp:
#include <stdio.h>
#include <opencv2/opencv.hpp>
#include <boost/python.hpp>
using namespace cv;
int main(){}
Mat visualize(const cv::Mat input_image)
{
cv::Mat image;
image = input_image;
namedWindow("Display Image", WINDOW_AUTOSIZE );
imshow("Display Image", image);
waitKey(0);
return image;
}
using namespace boost::python;
BOOST_PYTHON_MODULE(testing) // file name
{
def("visualize", visualize); //function name
}
python_caller.py:
import cv2
import numpy as np
from testing import visualize
A = cv2.imread("imageL.jpg")
visualize(A)
生成文件:
CFLAGS=`pkg-config --cflags opencv`
LDFLAGS=`pkg-config --libs opencv`
testing.so: testing.o
g++ -shared -Wl,--export-dynamic -o testing.so testing.o -L/usr/lib -lboost_python -L/usr/lib/python2.7/config -lpython2.7 -L/usr/lib/x86_64-linux-gnu/ -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab
testing.o: testing.cpp
g++ -I/usr/include/python2.7 -I/usr/include -fPIC -c testing.cpp
【问题讨论】:
标签: python c++ opencv numpy boost