在尝试计算阈值(二进制)图像的每列总和时,我遇到了OpenCV。
此代码
Mat thrs;
threshold(roi, thrs, 252, 255, THRESH_BINARY);
Mat dy;
reduce(thrs, dy, 1, CV_REDUCE_SUM);
给我一个运行时错误说明
OpenCV Error: Unsupported format or combination of formats
我认为这是由于二进制图像采用CV_8UC1格式,因此dy的格式相同,不能保存总和值。它是否正确?怎么回事呢?
答案 0 :(得分:2)
如果未指定最后一个参数class Wrapper {
public void performAction() {
myClass.method1();
myClass.find(entityId);
}
}
且未初始化目标矩阵,cv::reduce
将假定dtype
等于源矩阵的类型。在您的情况下,它将是dtype
。由于此格式无法存储求和值,因此会出现运行时错误。
因此,为了避免此错误,您需要指定CV_8UC1
参数。例如:
dtype
答案 1 :(得分:1)
reduce函数仅支持32S
32F
和64F
作为输出。这不在reduce
函数的文档中......但是就像那样......默认情况下它会尝试采用与输入相同的类型。所以,你可以尝试做这样的事情:
cv::reduce(thrs, dy, 1, CV_REDUCE_SUM, CV_32S);
提醒一下:
32S is int
32F is float
64F is float