尝试将图像与 openCV 混合

Posted

技术标签:

【中文标题】尝试将图像与 openCV 混合【英文标题】:Try to blend the Image with 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 【参考方案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()

【讨论】:

以上是关于尝试将图像与 openCV 混合的主要内容,如果未能解决你的问题,请参考以下文章

使用opencv复制/混合不同大小的图像

Python 大白从零开始 OpenCV 学习课-4.图像的叠加与混合

opencv4opencv视频教程 C++ 6图像混合线性混合混合权重相加addWeighted()混合加add()混合乘multiply()

OpenCV + CPP 系列图像的加权混合 对比度与亮度

在 OpenCV 图像拼接中混合伪影

在opencv中屏蔽图像