我有两张图片大部分相似,但有些细节不同。我想创建第三张图像,其中所有不同的部分都在一起,同时保持相同的部分。例如,假设我有一个左侧的红色圆圈和一个右侧的蓝色三角形的图片,我想创建一个包含左侧的红色圆圈和右侧的蓝色三角形的图片
我尝试使用cv2.add
,但是它不起作用,我尝试使用cv2.addweighted
,但是它仅在图像背景为黑色并且将权重设置为1
时才起作用。我还能怎么做?我可以使用其他库代替OpenCV来简化生活吗?
这是我想要的输出:
import cv2
img1 = cv2.imread('RedCircle.png')
img2 = cv2.imread('BlueTriangle.png')
img3 = cv2.add(img1,img2)
cv2.imshow('res',img3)
cv2.waitKey(0)
cv2.destroyAllWindows()
如果我使用此代码,则会出现空白屏幕:
答案 0 :(得分:0)
这是在Python / OpenCV中执行此操作的一种方法。只是简单地添加是行不通的。
图片1(从webp转换为png以供查看):
图片2(从webp转换为png以供查看):
import cv2
img1 = cv2.imread('circle.webp')
print(img1.shape)
img2 = cv2.imread('triangle.webp')
print(img2.shape)
gray2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
thresh2 = cv2.threshold(gray2, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)[1]
result1 = cv2.bitwise_and(img1, img1, mask=thresh2)
result2 = cv2.bitwise_and(img2, img2, mask=255-thresh2)
result = cv2.add(result1, result2)
cv2.imwrite("triangle_thresh.png", thresh2)
cv2.imwrite("circle_masked.png", result1)
cv2.imwrite("triangle_masked.png", result2)
cv2.imwrite("circle_triangle_combined.png", result)
cv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.imshow('thresh2',thresh2)
cv2.imshow('result1',result1)
cv2.imshow('result2',result2)
cv2.imshow('result',result)
cv2.waitKey(0)
cv2.destroyAllWindows()
阈值三角形图像:
蒙版圆圈图片:
遮罩的三角形图像:
合并的蒙版图像: