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++ Reduce函数计算每列的总和_C++_Opencv - Fatal编程技术网

C++ Reduce函数计算每列的总和

C++ Reduce函数计算每列的总和,c++,opencv,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采用相同的格式,无法保存汇总

当我试图计算阈值化二值图像的每列总和时,我被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采用相同的格式,无法保存汇总值。这是正确的吗?这是怎么回事?

reduce函数只支持32S 32F和64F作为输出。这不在函数的文档中。。。但它是这样的。。。默认情况下,它将尝试采用与输入相同的类型。因此,您可以尝试这样做:

cv::reduce(thrs, dy, 1, CV_REDUCE_SUM, CV_32S);
只是提醒一下:

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

reduce函数仅支持32S 32F和64F作为输出。这不在函数的文档中。。。但它是这样的。。。默认情况下,它将尝试采用与输入相同的类型。因此,您可以尝试这样做:

cv::reduce(thrs, dy, 1, CV_REDUCE_SUM, CV_32S);
只是提醒一下:

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

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

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

reduce(thrs, dy, 1, CV_REDUCE_SUM, CV_32SC1);

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

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

reduce(thrs, dy, 1, CV_REDUCE_SUM, CV_32SC1);