如何用cv2将图像指定坐标替换为另外一个图像
时间: 2024-03-24 17:38:38 浏览: 118
可以使用 OpenCV 的 cv2.addWeighted() 函数来实现将图像指定坐标替换为另外一个图像的效果。具体步骤如下:
1. 读取两张图片,分别为原图和待替换的图片。
```python
import cv2
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')
```
2. 获取待替换图像的宽高和通道数。
```python
rows, cols, channels = img2.shape
```
3. 指定待替换图像在原图中的位置。
```python
roi = img1[100:100+rows, 100:100+cols]
```
4. 将待替换图像转化为灰度图。
```python
img2gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
```
5. 对待替换图像进行二值化处理。
```python
ret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)
```
6. 对掩码图像进行反色处理。
```python
mask_inv = cv2.bitwise_not(mask)
```
7. 对原图中指定位置的像素进行掩膜操作。
```python
img1_bg = cv2.bitwise_and(roi, roi, mask=mask_inv)
```
8. 对待替换图像进行掩膜操作。
```python
img2_fg = cv2.bitwise_and(img2, img2, mask=mask)
```
9. 将原图中指定位置的像素与待替换图像进行融合。
```python
dst = cv2.addWeighted(img1_bg, 1, img2_fg, 1, 0)
```
10. 将融合后的图像替换原图中指定位置的像素。
```python
img1[100:100+rows, 100:100+cols] = dst
```
完整代码如下:
```python
import cv2
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')
rows, cols, channels = img2.shape
roi = img1[100:100+rows, 100:100+cols]
img2gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)
img1_bg = cv2.bitwise_and(roi, roi, mask=mask_inv)
img2_fg = cv2.bitwise_and(img2, img2, mask=mask)
dst = cv2.addWeighted(img1_bg, 1, img2_fg, 1, 0)
img1[100:100+rows, 100:100+cols] = dst
cv2.imshow('result', img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文