从Python Cod返回Opencv Mat类型

2024-09-28 03:17:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从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

任何一个专家都可以帮我解决这个问题。在


Tags: 程序imgsoincludelibusrlocalres
2条回答

在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

我的_图书馆水电站在

 #include <opencv2/core.hpp>
 #include <iostream>

 cv::Mat getImage(cv::Mat& image)
{
    std::cout << "image size " << image.rows << " " << image.cols << std::endl;
    return image;
}

我的自由。我

^{pr2}$

在测试.py(opencv swig library与script放在同一文件夹中)

^{3}$

这些命令

swig -I<path to opencv-swig-master/lib/> -I<path to opencv2 include folder> -c++ -python my_lib.i
g++ -shared -fpic my_lib_wrap.cxx $(pkg-config  cflags  libs python3) $(pkg-config  libs opencv) -o _my_lib.so

相关问题 更多 >

    热门问题