gpt4 book ai didi

c++ - 如何将这个用于 OpenCV 的 MatExpr 的 C 包装器的指针输出转换回 MatExpr

转载 作者:行者123 更新时间:2023-11-28 07:00:09 25 4
gpt4 key购买 nike

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

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

我想我把这部分做对了,我将 frame 转换为指针以在 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有编译错误:

error C2664: 'cv::cvtColor' : cannot convert parameter 2 from 'cv::MatExpr' to 'cv::OutputArray '

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com