📜  在openCV中的特定坐标处显示另一个图像上的图像 (1)

📅  最后修改于: 2023-12-03 15:37:36.797000             🧑  作者: Mango

在OpenCV中的特定坐标处显示另一个图像上的图像

在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的图像。