cv2.addweighted()中的错误

时间:2017-12-19 09:52:00

标签: python-3.x opencv python-3.6

这是我的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

有什么问题?我搜索了命令,我确定命令没问题。不明白错误!帮助!

3 个答案:

答案 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

可能的原因:

  1. img1 / img2中的一个或多个是not np.ndarray,例如None。也许你没看过它。
  2. img1.shape不等于img2.shape。它们有不同的尺寸。
  3. 如果您不确定它们是否大小相同,则应在img1.shape之前检查img2.shapecv2.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]

img =是两个图像中要执行操作的图像,并且是另一个图像的内部[]大小。

然后您将获得相同尺寸的图像,然后对其进行操作。