OpenCV-输入参数的大小与-addWeighted不匹配
OpenCV - Sizes of input arguments do not match - addWeighted
我正试图在图像的某个位置应用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
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 我的神经网络不起作用 [XOR 问题]
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- QSqlquery prepare()和bindvalue()不工作
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 检查输入是否不是整数或数字
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 使用不带参数的函数访问结构元素
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 不带大括号的枚举形式
- “BaseChild
*”和“DerivedChild *”之间的不匹 - OpenCV-输入参数的大小与-addWeighted不匹配