尝试将图像与 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 混合的主要内容,如果未能解决你的问题,请参考以下文章
Python 大白从零开始 OpenCV 学习课-4.图像的叠加与混合
opencv4opencv视频教程 C++ 6图像混合线性混合混合权重相加addWeighted()混合加add()混合乘multiply()