这是我的mage混合的代码,但是cv2.addweighted()有问题:
import cv2
import numpy as np
img1 = cv2.imread('1.png')
img2 = cv2.imread('messi.jpg')
dst= cv2.addWeighted(img1,0.5,img2,0.5,0)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
错误是:
Traceback (most recent call last):
dst= cv2.addWeighted(img1,0.5,img2,0.5,0)
cv2.error: C:\projects\opencv-python\opencv\modules\core\src\arithm.cpp:659: 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 cv::arithm_op
有什么问题?我搜索了命令,我确定命令没问题。不明白错误!帮助!
答案 0 :(得分:3)
运行时:
dst= cv2.addWeighted(img1,0.5,img2,0.5,0)
错误信息:
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 cv::arithm_op
可能的原因:
not np.ndarray
,例如None
。也许你没看过它。img1.shape
不等于img2.shape
。它们有不同的尺寸。如果您不确定它们是否大小相同,则应在img1.shape
之前检查img2.shape
和cv2.addWeighted
。
或者,如果您想在大图片上添加小图片,则应使用ROI
/ mask
/ slice
操作。
答案 1 :(得分:1)
正如上面答案中对问题和原因2的评论之一所指出的,您还可以尝试调整其中一个图像以匹配另一个图像,然后尝试 addWeighted 。
您的代码将如下所示:
import cv2
import numpy as np
img1 = cv2.imread('1.png')
img2 = cv2.imread('messi.jpg')
# Read about the resize method parameters here: https://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html?highlight=resize#resize
img2_resized = cv2.resize(img2, (img1.shape[1], img1.shape[0]))
dst = cv2.addWeighted(img1, 0.7, img2_resized, 0.3, 0)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
答案 2 :(得分:0)
即使我遇到了同样的错误。由于图像大小不同,因此我使用了ROI(图像区域),即只取了一部分图像,该图像与另一图像大小相同。 使用此代码:
part = img [0:168,0:300]
然后您将获得相同尺寸的图像,然后对其进行操作。