python写一个图像二值化,形态学处理后,滤除噪声提取主体部分的代码用opencv,matplotlib以及nump库
时间: 2023-06-03 10:07:21 浏览: 118
以下是根据您的要求编写的Python代码:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读取图片
img = cv2.imread('image.jpg')
# 灰度化处理
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理,像素值低于128设为0,否则设为255
_, binary_img = cv2.threshold(gray_img, 128, 255, cv2.THRESH_BINARY)
# 形态学处理,先腐蚀再膨胀,用于去除噪声和连接断开的边缘
kernel = np.ones((3,3), np.uint8)
morphed_img = cv2.morphologyEx(binary_img, cv2.MORPH_OPEN, kernel)
# 连通域分析,提取主体部分
_, contours, _ = cv2.findContours(morphed_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
main_img = np.zeros_like(morphed_img)
for contour in contours:
x,y,w,h = cv2.boundingRect(contour)
main_img[y:y+h,x:x+w] = morphed_img[y:y+h,x:x+w]
# 显示结果
plt.subplot(221), plt.imshow(img), plt.title('Original Image')
plt.subplot(222), plt.imshow(binary_img, cmap='gray'), plt.title('Binary Image')
plt.subplot(223), plt.imshow(morphed_img, cmap='gray'), plt.title('Morphed Image')
plt.subplot(224), plt.imshow(main_img, cmap='gray'), plt.title('Main Image')
plt.show()
```
您需要将图片命名为image.jpg并且放在代码所在的同一目录下。代码会输出四张图片,分别为原始图片、二值化后的图片、形态学处理后的图片以及提取出的主体部分。
阅读全文