我试图从opencv python代码返回(c++opencv Mat)
我完成的步骤:
使用Sigg 生成OpenCV C++程序的文件编写了一个opencvpython程序
<强> A.Guest.OptoCencv C++代码:>P/>
打开CVTEST.cpp
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int my(Mat image)
{
cv::Mat out;
if(! image.data ) // Check for invalid input
{
cout << "Could not open or find the image" << std::endl ;
}
cvtColor(image, out,COLOR_BGR2GRAY);
int z=10;
return z;
}
opencvtest.i
^{pr2}$ < P><强>完成以下命令,为我的C++程序成功生成.so文件:>/P>1.swig -c++ -python opencvtest.i
2.g++ -fpic -c opencvtest.cpp opencvtest_wrap.cxx -I/usr/include/python2.7 -I/usr/local/include -I/usr/local/include/opencv -I/usr/local/include/opencv2
3.g++ -shared opencvtest.o opencvtest_wrap.o -o _opencvtest.so -L/usr/local/lib /usr/local/lib/libopencv_calib3d.so /usr/local/lib/libopencv_core.so /usr/local/lib/libopencv_features2d.so /usr/local/lib/libopencv_flann.so /usr/local/lib/libopencv_highgui.so /usr/local/lib/libopencv_imgcodecs.so /usr/local/lib/libopencv_imgproc.so /usr/local/lib/libopencv_ml.so /usr/local/lib/libopencv_objdetect.so /usr/local/lib/libopencv_photo.so /usr/local/lib/libopencv_shape.so /usr/local/lib/libopencv_stitching.so /usr/local/lib/libopencv_superres.so /usr/local/lib/libopencv_ts.a /usr/local/lib/libopencv_video.so /usr/local/lib/libopencv_videoio.so /usr/local/lib/libopencv_videostab.so
B.编写了一个示例Opencv Python程序以返回Opencv c++Mat:
样品.py
from __future__ import division
import cv2 , numpy
import opencvtest
img = cv2.imread('/home/hubino/Desktop/python/MyPic.jpg')
screen_res = 1280, 720
scale_width = screen_res[0] / img.shape[1]
scale_height = screen_res[1] / img.shape[0]
scale = min(scale_width, scale_height)
window_width = int(img.shape[1] * scale)
window_height = int(img.shape[0] * scale)
res=opencvtest.sample(img)
cv2.imshow('Source Image',img)
cv2.waitKey(0)
cv2.namedWindow('dst_rt', cv2.WINDOW_NORMAL)
cv2.resizeWindow('dst_rt', window_width, window_height)
cv2.imshow('dst_rt', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
当我尝试执行时遇到这个错误样品.py在我的机器上
回溯(最近一次呼叫): 文件“sample1.py”,第15行,res=opencvtest.my(图像) TypeError:在“my”方法中,类型为“cv::Mat”的参数1
任何一个专家都可以帮我解决这个问题。在
在c++代码中,您使用的是cv::Mat数据类型。正如在python中使用openCV一样,我可以想象您也期望得到相同的数据类型。 但是在python中openCV使用numpy数组作为图像格式。在
在下面的链接中,他们讨论了c++下的numpy数据格式。我可以想象你使用这个数据格式来在Python和C++之间进行通信。在C++中,你需要从NUMPY到CV::Mat的转换。在
https://scipy-lectures.github.io/advanced/interfacing_with_c/interfacing_with_c.html
发布以防有人面临同样的问题:
使用SWIG和https://github.com/renatoGarcia/opencv-swig处理传递的cv::Mat
我的_图书馆水电站在
我的自由。我
^{pr2}$在测试.py(opencv swig library与script放在同一文件夹中)
^{3}$这些命令
相关问题 更多 >
编程相关推荐