Python用cv2显示1.png的前景背景分割后的二值图像、腐蚀图、膨胀图,梯度图、开运算、闭运算
时间: 2024-11-09 11:24:48 浏览: 23
在Python中,使用OpenCV(cv2库)处理图像并显示不同操作的结果,你需要首先读取图片,然后对二值化图像进行预处理。以下是展示1.png图像的一些基本步骤:
1. **加载图像**:
```python
import cv2
img = cv2.imread('1.png', cv2.IMREAD_GRAYSCALE) # 读取灰度图像
```
2. **前景背景分割(二值化)**:
这里假设你已经有了阈值将图像转换为二值,例如通过Otsu's thresholding:
```python
_, binary_img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
```
3. **腐蚀** (erosion) 减少图像边缘的小黑点:
```python
kernel = np.ones((3, 3), np.uint8) # 创建一个3x3的结构元素
eroded_img = cv2.erode(binary_img, kernel)
```
4. **膨胀** (dilation) 扩大图像的边界:
```python
dilated_img = cv2.dilate(binary_img, kernel)
```
5. **梯度图 (Sobel算子)** 计算图像的梯度:
```python
sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3) # 水平梯度
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3) # 垂直梯度
gradient_img = cv2.bitwise_or(sobelx, sobely)
```
6. **开运算 (Opening)** 先腐蚀再膨胀,用于去除小噪声:
```python
opening_img = cv2.morphologyEx(binary_img, cv2.MORPH_OPEN, kernel)
```
7. **闭运算 (Closing)** 先膨胀再腐蚀,用于连接断裂的部分:
```python
closing_img = cv2.morphologyEx(binary_img, cv2.MORPH_CLOSE, kernel)
```
8. **显示结果**:
```python
for img_name, processed_img in zip(['binary', 'eroded', 'dilated', 'gradient', 'opening', 'closing'], [binary_img, eroded_img, dilated_img, gradient_img, opening_img, closing_img]):
cv2.imshow(f"{img_name}", processed_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文