OpenCV python cv2.Canny函数';s输出Mat对象没有';我没有频道信息

OpenCV python cv2.Canny函数';s输出Mat对象没有';我没有频道信息,python,numpy,opencv,Python,Numpy,Opencv,我试图在python中添加两个不同的Mat对象。 两个Mat对象都是二进制图像(CV_8U)。但是由于矩阵的大小不同,我在添加它们时会出错 我使用numpy为通道生成一个具有适当值的Mat对象,如下所示: 对角线=np.零((高度、宽度、1)) cv2.线条(对角线,(0,0),(高度,宽度),(255)) 另一个Mat对象来自cv2。Canny: canny_edge = cv2.Canny(input_image, min_thr, max_thr) 添加代码: final=cv2.add

我试图在python中添加两个不同的Mat对象。 两个Mat对象都是二进制图像(CV_8U)。但是由于矩阵的大小不同,我在添加它们时会出错

我使用numpy为通道生成一个具有适当值的Mat对象,如下所示:

对角线=np.零((高度、宽度、1))
cv2.线条(对角线,(0,0),(高度,宽度),(255))

另一个Mat对象来自cv2。Canny:

canny_edge = cv2.Canny(input_image, min_thr, max_thr)
添加代码:
final=cv2.addWeighted(canny_边,1.0,对角线,1.0,0)

尝试添加2个Mat对象时,出现以下错误:
错误:(-5)当加法/减法/乘法/除法函数中的输入数组具有不同的类型时,必须在函数cv::arithm_op中明确指定输出数组类型

我还尝试从numpy生成的矩阵中删除通道值,但得到了相同的错误

所以我试着打印频道,但我得到了这个:

高度、重量、通道=canny_edge.shape
ValueError:没有足够的值来解包(预期为3,得到2)


编辑:很抱歉,Miki发布的答案对我没有帮助。cv2.Canny生成的Mat对象没有通道信息。我知道这是一个二进制图像,但opencv在尝试将此Mat对象的矩阵与具有通道信息的Mat对象相加时会感到困惑。

基本上,使用canny_edge Mat对象并使用以下方法将其转换为numpy数组:

canny\u edge\u nparr=np.asarray(canny\u edge)

然后我们可以给它添加一个维度(cv2.Canny输出一个形状为:(高度,宽度)的Mat对象):

canny\u edge\u nparr=np.展开\u dims(canny\u edge\u nparr,axis=2)

现在,形状表示(高度、宽度、通道)。现在使用numpy addition添加阵列:


final=np.add(canny\u edge\u nparr,对角线)

@Miki,我已经更新了问题,以更详细地说明问题所在。在这种情况下,您标记的问题没有任何帮助。您能否只向
canny_edge
添加一个单例维度?@Miki感谢您的回答。是的,我试过了。但是加法永远不会终止。看起来它好像陷入了一个循环。@Miki抱歉。请忽略我最后的评论。我想我试过了,但找不到上下文。你能告诉我如何给cv2.Canny输出的Mat对象添加一个单体维度吗?我将在这里为其他人发布答案,因为问题标记为重复,我没有得到答案按钮。基本上,使用
canny\u-edge
Mat对象,并使用以下命令将其转换为numpy数组:
canny\u-edge\u-npar=np.asarray(canny\u-edge)
然后我们可以向其添加一个维度:
canny\u-edge\u-npar=np.expand\u-dims(canny\u-edge\u-npar,axis=2)
现在形状表示(高度、宽度、通道)现在使用numpyaddition添加数组:
final=np.add(canny\u edge\u nparr,对角线)