减少函数计算每列的总和

Her*_*rst 2 c++ opencv

在尝试计算阈值(二进制)图像的每列总和时,我陷入了 OpenCV 的困境。

这段代码

Mat thrs;
threshold(roi, thrs, 252, 255, THRESH_BINARY);
Mat dy;
reduce(thrs, dy, 1, CV_REDUCE_SUM);
Run Code Online (Sandbox Code Playgroud)

给我一个运行时错误说明

OpenCV Error: Unsupported format or combination of formats
Run Code Online (Sandbox Code Playgroud)

我认为这是由于二进制图像采用 CV_8UC1 格式,因此 dy 具有相同的格式并且无法保存求和值。它是否正确?有什么办法吗?

aka*_*kov 7

如果未指定最后一个参数dtype并且目标矩阵未初始化,cv::reduce将假定dtype等于源矩阵的类型。在你的情况下它将是CV_8UC1。由于这种格式无法存储求和值,因此会出现运行时错误。

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

reduce(thrs, dy, 1, CV_REDUCE_SUM, CV_32SC1);
Run Code Online (Sandbox Code Playgroud)