OpenCV-输入参数的大小与-addWeighted不匹配

OpenCV - Sizes of input arguments do not match - addWeighted

本文关键字:-addWeighted 不匹配 输入 参数 OpenCV-      更新时间:2023-10-16

我正试图在图像的某个位置应用Canny运算符,代码如下:

//region of interest from my RGB image
Mat devilROI = img(Rect(r->x+lowerRect.x, 
                        r->y + lowerRect.y, 
                        lowerRect.width, 
                        lowerRect.height));
Mat canny;
//to grayscale so I can apply canny
cvtColor(devilROI, canny, CV_RGB2GRAY);
//makes my region of interest with Canny
Canny(canny, canny, low_threshold, high_threshold);
//back to the original image
addWeighted(devilROI, 1.0, canny, 0.3, 0., devilROI);

当执行addWeighted时,它给了我以下错误:

OpenCV错误:输入参数的大小不匹配(操作既不是"array op array"(其中数组具有相同的大小和相同的通道数),也不是"array-op-scalar"或"scalar op-array"),位于文件C:\OpenCV2.3\OpenCV\modules\core\src\arrithm.cpp的第1227行在引发"cv::Exception"的实例后调用了terminatewhat():C:\OpenCV2.3\opencv\modules\core\src\alphts.cpp:1227:错误:(-209)操作既不是"array-op-array"(其中数组具有相同大小和相同数量的通道),也不是"array op scalar",也不是函数算术运算中的"scalar op array"

你对可能出现的问题有什么建议吗?我已经被这个问题困扰了很长时间。。。

谢谢。

简单。两个图像中要合并的通道数量不同。

cvtColor(devilROI, canny, CV_RGB2GRAY);

正在拍摄您的3通道图像,并将其转换为1通道灰度图像。您需要相同数量的通道才能使用addWeighted

好的,我想我明白了。

我试着使用Mat::copyTo,然后我得到了:

 (scn ==1 && (dcn == 3 || dcn == 4))

错误。

然后我找到了这个Stackoveflow主题,它给了我转换回RGB的想法,然后我尝试了以下方法,它成功了:

Mat devilROI = img(Rect(r->x+lowerRect.x, 
                        r->y + lowerRect.y, 
                        lowerRect.width, 
                        lowerRect.height));
Mat canny;
cvtColor(devilROI, canny, CV_BGR2GRAY);
Canny(canny, canny, low_threshold, high_threshold);
cvtColor(canny, canny, CV_GRAY2BGR);
addWeighted(devilROI, 1.0, canny, 0.3, 0., devilROI);

所以,如果有人有其他建议,我将不胜感激。

谢谢!

addWeighted(devilROI, 0.7, canny, 0.3, 0., devilROI);

这将解决问题
用于合并的公式:

g=(1-alpha)img1+(alpha)img1+gamma

请参阅文件:https://docs.opencv.org/4.x/d2/de8/group__core__array.html#gafafb2513349db3bcff51f54ee5592a19