Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何指定MatExpr的结果类型?_C++_Opencv - Fatal编程技术网

C++ 如何指定MatExpr的结果类型?

C++ 如何指定MatExpr的结果类型?,c++,opencv,C++,Opencv,我的代码中有以下表达式: *h=(*R)/(*G)+(*R)) 其中R、G和B是uchar的Mat指针,因为有除法,我想将答案转换为float 所以我试过这个 *h=Mat_uuz((*R)/(*G)+(*R)) 但我也因此受到指责 我该怎么做 您需要将矩阵*R转换为浮点数。使用方法Mat::convert_to。假设R8是uchar的矩阵,您可以按如下方式创建浮点矩阵: Mat R32; R8.convertTo(R32,CV_32F); 这在OpenCV中有很好的解释 注1:此表达式使用u

我的代码中有以下表达式:
*h=(*R)/(*G)+(*R))
其中R、G和B是
uchar
的Mat指针,因为有除法,我想将答案转换为
float

所以我试过这个
*h=Mat_uuz((*R)/(*G)+(*R))

但我也因此受到指责


我该怎么做

您需要将矩阵*R转换为浮点数。使用方法
Mat::convert_to
。假设R8是uchar的矩阵,您可以按如下方式创建浮点矩阵:

Mat R32; R8.convertTo(R32,CV_32F);
这在OpenCV中有很好的解释

注1:此表达式使用uchars执行除法,然后将结果重新解释为float,这是错误的
Mat
仅用于简化已浮动数组的元素访问


注2:大多数时候不需要使用指针来填充。

谢谢,所以现在我在未知函数中得到了“OpenCV错误:错误参数(当加法/减法/乘法/除法函数中的输入数组具有不同类型时,必须显式指定输出数组类型”),文件:\slave\builds\wininstallermagapack\src\opencv\modules\core\src\arithm.cpp,第1303行',那么如何将输出类型指定为浮点型?尝试使用
Mat::convert\u to()
将所有矩阵转换为浮点型。这不会有性能问题吗?这段代码应该在移动设备上的每一帧上运行,我希望尽可能减少分配,当然,在运行时尽可能地减少,分配新的浮点矩阵将花费一些钱。如果需要获得性能,则需要进行像素级处理(而不是矩阵表达式)。