2012-01-17 583 views
9

我试图运用Canny算子与下面的代码的图像的特定位置:的OpenCV - 输入参数大小不匹配 - addWeighted

//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 Error: Sizes of input arguments do not match (The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array') in arithm_op, file C:\OpenCV2.3\ opencv\modules\core\src\arithm.cpp, line 1227 
terminate called after throwing an instance of 'cv::Exception' 
what(): C:\OpenCV2.3\opencv\modules\core\src\arithm.cpp:1227: error: (-209) The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array' in function arithm_op 

你有什么样的问题可能是什么建议吗? 我一直停留在这个很长一段时间......

谢谢。

+0

这行特别引发错误? - 不用担心,我看到它是'加权'。 – 2012-01-17 01:42:07

+0

@ mathematical.coffee addWeighted,编辑该问题。谢谢。 – mrcaramori 2012-01-17 01:45:28

回答

9

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

cvtColor(devilROI, canny, CV_RGB2GRAY); 

正在将您的3通道图像变成1通道灰度图像。您需要使用相同的通道数的addWeighted

2

好的,我想我明白了。

我尝试使用垫:: CopyTo从,然后我得到了:

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

错误。

后来我发现this 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); 

因此,如果任何人有任何其他建议,我会感激。

谢谢!

+0

python代码如何? – Allan 2015-10-08 01:48:51