opencv-python尝试特殊形状的掩膜操作,比如:编写代码对附件图像2(dog.png)中的动物使用圆形掩膜,对掩膜区域进行自适应直方图均衡化处理,并绘制出操作前后的直方图
时间: 2024-11-30 09:22:39 浏览: 13
在OpenCV-Python中,你可以使用`cv2.circle()`函数来创建一个圆形掩模,然后利用`cv2.bitwise_and()`来进行掩码操作。以下是一个简单的步骤来实现这个功能:
首先,导入必要的库并加载图片:
```python
import cv2
import numpy as np
# 加载动物图像
img = cv2.imread('dog.png', cv2.IMREAD_GRAYSCALE)
```
接下来,定义圆形掩膜的中心点和半径:
```python
center = (img.shape[1] // 2, img.shape[0] // 2) # 圆心,假设图像是对称的
radius = int(min(img.shape[:2]) * 0.4) # 半径,通常取图像宽度或高度的一小部分
```
创建圆形掩膜:
```python
mask = np.zeros_like(img)
cv2.circle(mask, center, radius, 255, -1) # 255表示白色,-1表示内切圆
```
然后进行掩码操作,这里我们使用`cv2.adaptiveEqualizeHist()`进行自适应直方图均衡化:
```python
masked_img = cv2.bitwise_and(img, img, mask=mask)
equ_hist_img = cv2.adaptiveEqualization(masked_img)
```
最后,绘制操作前后的直方图对比,可以使用`matplotlib`库:
```python
import matplotlib.pyplot as plt
# 绘制原始直方图
plt.subplot(2, 1, 1), plt.hist(img.ravel(), bins=256, range=(0, 256))
plt.title('Original Histogram')
# 绘制处理后的直方图
plt.subplot(2, 1, 2), plt.hist(equ_hist_img.ravel(), bins=256, range=(0, 256))
plt.title('Histogram after Adaptive Equalization')
plt.show()
```
这段代码会显示两张直方图,上方的是原始图像的直方图,下方的是经过自适应直方图均衡化的直方图。
阅读全文