使用python OpenCV,将彩色图片中除了一块矩形区域外更改为黑白色,而矩形区域保留彩色
时间: 2024-02-27 15:52:25 浏览: 219
好的,我会为您提供一个 OpenCV 的 Python 实现,来实现您提出的要求。
实现步骤如下:
1. 导入必要的库
```python
import cv2
import numpy as np
```
2. 读取原始彩色图片
```python
img = cv2.imread('input.png')
```
3. 获取图片的尺寸大小
```python
height, width, _ = img.shape
```
4. 创建一个和原图一样大小的黑白图片
```python
gray_image = np.zeros((height, width), dtype=np.uint8)
```
5. 创建一个矩形的掩膜,将该区域保留彩色
```python
mask = np.zeros((height, width), dtype=np.uint8)
x1, y1, x2, y2 = 100, 100, 300, 300 # 矩形区域的左上角和右下角坐标
mask[y1:y2, x1:x2] = 255
result = cv2.bitwise_and(img, img, mask=mask)
```
6. 将除矩形区域外的其它区域转换为黑白色
```python
gray_image[~mask.astype(bool)] = 255
gray_image = cv2.cvtColor(gray_image, cv2.COLOR_GRAY2BGR)
```
7. 将两张图片叠加在一起
```python
result = cv2.add(result, gray_image)
```
8. 显示结果
```python
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
9. 保存结果
```python
cv2.imwrite('output.png', result)
```
其中,(x1, y1) 和 (x2, y2) 分别代表矩形区域左上角和右下角的坐标。
完整的代码如下:
```python
import cv2
import numpy as np
img = cv2.imread('input.png')
height, width, _ = img.shape
gray_image = np.zeros((height, width), dtype=np.uint8)
mask = np.zeros((height, width), dtype=np.uint8)
x1, y1, x2, y2 = 100, 100, 300, 300 # 矩形区域的左上角和右下角坐标
mask[y1:y2, x1:x2] = 255
result = cv2.bitwise_and(img, img, mask=mask)
gray_image[~mask.astype(bool)] = 255
gray_image = cv2.cvtColor(gray_image, cv2.COLOR_GRAY2BGR)
result = cv2.add(result, gray_image)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('output.png', result)
```
阅读全文