这是我的OpenCV MatExpr“/”运算符的C包装器

MatExpr* cv_Mat_div_S(Mat* m1, int m2) {
        return new MatExpr(*m1 / m2);
    }

我想我正确地将框架转换为在cv_Mat_div_S中使用的指针
并在cv_Mat_div_S函数中使用对它的引用
 Mat mat(frame);
 cv_Mat_div_S(&mat, 255);

但是,在尝试像下面这样的普通C++ cvtColor中使用Cv_Mat_div_S的输出时,我遇到了一长串错误,其中最重要的是:

错误:与“operator *”不匹配(操作数类型为“cv::Mat”)
cvtColor(* mat,* mat,CV_BGR2Luv);

这就是我尝试转换回MatExpr的方式:
 cvtColor(*mat, *mat, CV_BGR2Luv);

我尝试使用&代替*,但没有成功。

我可以使用帮助将cv_Mat_div_S的输出转换回MatExpr以便在其他C++函数中进行测试...并且如果有人可能注意到cv_Mat_div_S包装器并验证是否有更好的编写方法,也许可以接受更多的方法。值参数的一种类型...但是不使用模板,因为我将其编译为.so,它应该放在extern C {}中

最佳答案

cvtColor()的声明是

void cvtColor( InputArray src, OutputArray dst, int code, int dstCn=0 );

MatExpr可以隐式转换为_InputArray。但是MatExpr不能隐式转换为_OutputArray。 (有关更多信息,请参见_InputArray和_OutputArray的源代码)

我尝试一个测试代码片段:
Mat a0;
MatExpr a(a0);
cvtColor(*(&a), *(&a), COLOR_GRAY2BGR);

VS2012有编译器错误:



因此,您需要指定一个有效的OutputArray(例如Mat而不是MatExpr)来保存转换后的Luv图像。

关于c++ - 如何将OpenCV的MatExpr的C包装器的指针输出转换回MatExpr,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22600005/

10-15 06:01