这是我的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/