【问题标题】:Try to blend the Image with openCV尝试将图像与 openCV 混合
【发布时间】:2020-11-14 12:25:26
【问题描述】:

img1 img2

img1 = cv.imread('face.png',1)
img2 = cv.imread('flower.png',1)
img2= cv.resize(img2,(642,640))
cv.imshow('img1',img1)
cv.imshow('img2',img2)
dst = cv.addWeighted(img1,0.7,img2,0.3,1)
cv.imshow('dst',dst)
cv.waitKey(0)
cv.destroyAllWindows()

给我这个

error: OpenCV(4.2.0) ../modules/core/src/arithm.cpp:666: error: (-209:Sizes of input arguments do not match) 该操作既不是'array op array'(其中数组具有相同的大小和相同的通道数),也不是函数'arithm_op'中的'array op scalar',也不是'scalar op array'

【问题讨论】:

  • 您发布了两张 JPEG 图片,但您的代码打开了两张 PNG 图片?
  • 一个是 jpeg,另一个是 jpg 我收到了这个错误,所以我把它们都改成了 png

标签: python opencv


【解决方案1】:

应该是:

img2= cv.resize(img2,(640,642))

原因是,当你检索图像形状时,它分别返回高度和宽度。

(h, w) = img.shape[:2]

然后您分别使用宽度和高度调整第二张图像的大小。

img2 = cv.resize(img2, (w, h))

但最好在使用 addWeighted 之前断言两个图像具有相同的形状,以确保两个图像的形状相同。

assert img1.shape == img2.shape

结果:


代码:


import cv2 as cv

img1 = cv.imread('face.png', 1)
img2 = cv.imread('flower.png', 1)

(h, w) = img1.shape[:2]
img2 = cv.resize(img2, (w, h))

assert img1.shape == img2.shape

cv.imshow('img1', img1)
cv.imshow('img2', img2)

dst = cv.addWeighted(src1=img1, alpha=0.7, src2=img2, beta=0.3, gamma=1.0)

cv.imshow('dst', dst)
cv.waitKey(0)

cv.imwrite("dst.png", dst)

cv.destroyAllWindows()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 2017-03-04
    • 2021-02-28
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 2014-11-29
    相关资源
    最近更新 更多