减少函数来计算每列的总和

时间:2016-04-20 08:26:39

标签: c++ opencv

在尝试计算阈值(二进制)图像的每列总和时,我遇到了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的格式相同,不能保存总和值。它是否正确?怎么回事呢?

2 个答案:

答案 0 :(得分:2)

如果未指定最后一个参数class Wrapper { public void performAction() { myClass.method1(); myClass.find(entityId); } } 且未初始化目标矩阵,cv::reduce将假定dtype等于源矩阵的类型。在您的情况下,它将是dtype。由于此格式无法存储求和值,因此会出现运行时错误。

因此,为了避免此错误,您需要指定CV_8UC1参数。例如:

dtype

答案 1 :(得分:1)

reduce函数仅支持32S 32F64F作为输出。这不在reduce函数的文档中......但是就像那样......默认情况下它会尝试采用与输入相同的类型。所以,你可以尝试做这样的事情:

cv::reduce(thrs, dy, 1, CV_REDUCE_SUM, CV_32S);

提醒一下:

32S is int
32F is float
64F is float