📅  最后修改于: 2023-12-03 15:37:36.797000             🧑  作者: Mango
在OpenCV中,我们可以很容易地显示图像。但是,有时候我们需要将一个图像放在另一个图像的特定位置。这个任务在OpenCV中也很容易完成。
首先,我们需要加载图像。我们使用OpenCV的imread()
函数读取图像:
import cv2
# 读取图像
img = cv2.imread('image.jpg')
接下来,我们可以使用imshow()
函数显示图像:
cv2.imshow('Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
这个代码片段将显示名为“Image”的窗口,并显示我们读取的图像。waitKey(0)
函数将等待用户按下任意键,然后关闭窗口。destroyAllWindows()
函数将关闭所有OpenCV窗口。
有了显示图像的基础,我们可以使用OpenCV的addWeighted()
函数将一个图像放在另一个图像的特定位置上。
import cv2
# 读取图像
img = cv2.imread('image.jpg')
img2 = cv2.imread('logo.jpg')
# 获取图像的高度和宽度
rows,cols,channels = img2.shape
# 设置ROI,即感兴趣区域
roi = img[0:rows, 0:cols ]
# 创建掩码,基于所有非黑色区域
img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)
# 在 ROI 中使用掩码将区域设为黑色
img1_bg = cv2.bitwise_and(roi,roi,mask = mask_inv)
# 在 ROI 中获取 logo 区域
img2_fg = cv2.bitwise_and(img2,img2,mask = mask)
# 合并 logo 和 ROI
dst = cv2.add(img1_bg,img2_fg)
img[0:rows, 0:cols ] = dst
# 显示图像
cv2.imshow('Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码片段中,我们将一个图像(logo.jpg)放在另一个图像(image.jpg)的左上角。要实现这一点,我们首先需要确定感兴趣区域(ROI),即我们要将图像放置的位置。在此例中,我们将logo图片放在x=0,y=0的位置。
接下来,我们需要创建一个掩码,来确定哪些区域需要在放置的图像上变成黑色。我们用cv2.cvtColor()
函数将图像转换成灰度图像,然后使用cv2.threshold()
函数创建阈值掩码。我们在感兴趣区域内使用cv2.bitwise_and()
函数将掩码应用于logo图像。
最后,我们将放置图像的黑色区域与logo图像相加,生成最终的图像。我们用cv2.add()
函数将这些图像相加。
最终,我们使用imshow()
函数显示图像。这次,我们将在图像上看到一个添加了logo的图像。