error: (-5) When the input arrays in add/subtract/multiply/divide functions have different types

error: (-5) When the input arrays in add/subtract/multiply/divide functions have different types, the output array type must be explicitly specified in function arithm_op

利用OpenCV函数

void addWeighted(InputArray src1, double alpha, InputArray src2,
                              double beta, double gamma, OutputArray dst, int dtype=-1);

合并两张图片时,发生以上错误:

error: (-5) When the input arrays in add/subtract/multiply/divide functions have different types,
 the output array type must be explicitly specified in function arithm_op

原因是“输入数组是不同的类型”。

因为 addweighted()函数
第一个参数:src1,表示进行加权操作的第一个图像对象,即输入图片1。
第二个参数:double型的alpha,表示第一个图像的加权系数,即图片1的融合比例。
第三个参数:src2,表示进行加权操作的第二个图像对象,即输入图片2。
第四个参数:double型的beta,表示第二个图像的加权系数,即图片2的融合比例。很多情况下,有关系 alpha+beta=1.0。
第五个参数:double型的gamma,表示一个作用到加权和后的图像上的标量,可以理解为加权和后的图像的偏移量。
第六个参数:dst,表示两个图像加权和后的图像,尺寸和图像类型与src1和src2相同,即输出图像。
第七个参数:输出阵列的可选深度,有默认值-1。当两个输入数组具有相同的深度时,这个参数设置为-1(默认值),即等同于src1.depth()。

所以我将原来的代码

//利用addWeighted()函数对两幅图像进行融合
  addWeighted(img, 0.5, img_sobel, 0.5, 0., img);

改为:

//利用addWeighted()函数对两幅图像进行融合
  addWeighted(img, 0.5, img_sobel, 0.5, 0., img, CV_32F);

原来的两个图的深度不同,现在加上深度的限定值,即可。

你可能感兴趣的:(openCV)