我的代码中有这个表达式:
*h = ((*R) / ((*G) + (*R)));
其中R,G和B是uchar
的Mat指针,因为存在除法我希望将答案转换为float
所以我试过这个
*h = Mat_<float>((*R) / ((*G) + (*R)));
但我得到了分段错误。
我该怎么办?
答案 0 :(得分:2)
您需要将矩阵* R转换为浮点数。使用方法Mat::convert_to
。假设R8是uchar矩阵,您可以按如下方式创建浮点矩阵:
Mat R32; R8.convertTo(R32,CV_32F);
在introduction中对OpenCV进行了很好的解释。
注1:此表达式*h = Mat_<float>((*R) / ((*G) + (*R)))
使用uchars执行除法,稍后将结果重新解释为float,这是错误的。 Mat_<float>
仅用于简化已经浮动的数组的元素访问。
注意2:大多数情况下,您不需要使用Mat指针。