从Python中的命令创建C++代码的文档

从Python中的命令创建C++代码的文档,python,c++,bash,opencv,Python,C++,Bash,Opencv,我正在使用opencv进行一个项目。我选择用python制作这个项目来简化我的任务。但是对于某些任务,Python非常慢,并且必须在C++中进行编码,以便有合理的执行时间。 我的第一个解决方案是尝试使用包装器,但两天后,我无法使其工作 我做了另一个解决方案:编译我的C++代码,用OS.Stand命令调用它。 我的代码如下: 在C中++ #include <iostream> #include <opencv2/opencv.hpp> #include "opencv2/c

我正在使用opencv进行一个项目。我选择用python制作这个项目来简化我的任务。但是对于某些任务,Python非常慢,并且必须在C++中进行编码,以便有合理的执行时间。 我的第一个解决方案是尝试使用包装器,但两天后,我无法使其工作

我做了另一个解决方案:编译我的C++代码,用OS.Stand命令调用它。 我的代码如下:

在C中++

#include <iostream>
#include <opencv2/opencv.hpp>
#include "opencv2/core/core.hpp"
using namespace cv;
using namespace std;


int main(int argc, char** argv){

    Mat src = imread(argv[1], 1);
    Mat dst = imread(argv[2], 1);

    unsigned char *sinput = (unsigned char*)(src.data);
    int lo = atoi(argv[3]);
    int up = atoi(argv[4]);
    int connectivity = 4;
    int newMaskVal = 255;
    int ffillMode = 1;
    int flags = connectivity + (newMaskVal << 8) + (ffillMode == 1 ? CV_FLOODFILL_FIXED_RANGE : 0);
    Rect ccomp;
    unsigned int counter = 0;
    for(int j = 0;j < src.rows;j++){
        for(int i = 0;i < src.cols;i++){
            unsigned short b = sinput[(src.cols * j * 3) + i*3 ] ;
            unsigned short g = sinput[(src.cols * j * 3) + i*3 + 1];
            unsigned short r = sinput[(src.cols * j * 3) + i*3 + 2];

            if (r == 0 and g == 255 and b == 0){
                unsigned char *dinput = (unsigned char*)(dst.data);
                unsigned short db = dinput[(dst.cols * j * 3) + i*3 ] ;
                unsigned short dg = dinput[(dst.cols * j * 3) + i*3 + 1];
                unsigned short dr = dinput[(dst.cols * j * 3) + i*3 + 2];
                if (dr != 0 or dg != 255 or db != 0){
                    floodFill(dst, Point(i,j), Scalar(0,255,0), &ccomp, Scalar(lo, lo, lo), Scalar(up, up, up), flags);
                    counter++;
                    if (counter > 100 && counter % 100 == 0){
                        cout << counter << endl;
                    }
                }
            }
        }
    }

    imwrite("/home/gaetan/Dropbox/Projects/PyCharm/FacadeClipper/tmp/flooded.png", dst);
    cout << "Image wrote!" << endl;
    return 0;
}
但遗憾的是,image flooded.png似乎不是在我使用python代码时创建的,而是在我使用bash命令时创建的

   $ ./flood /home/gaetan/ang.JPG /home/gaetan/an.JPG 20 20
文件已创建。我做错了什么

<>我知道这个解决方案真的很粗略,我真的很犹豫,完全用C++重新编码它,但是因为它已经是一大堆代码,所以我宁愿不强迫它。
谢谢:

您是否尝试过使用SWIG进行自动绑定?它相当不错:是的,但我没法让它工作。我在用python进行导入时总是出错:/您的实际问题是什么?在Python中调用C++是否存在问题,或者在纯Python中有问题吗?新的CFFI版本刚刚推出,可能会让您感兴趣:也许您可以将此命令存储在……//..…/Trime/TMP/IMG.PNG./tMP/IM.PNG+StruL+Stup中,并在打印到OS.系统之前打印它。脚本完成后,您可以尝试手动执行它。可能是文件路径有问题。
   $ ./flood /home/gaetan/ang.JPG /home/gaetan/an.JPG 20 20