python图像分割提取主体并用mark_boundary方法画出
时间: 2024-01-16 09:05:14 浏览: 83
如果您想从一张图像中提取主体部分,并使用 `mark_boundary` 方法将主体部分的边界画出来,可以使用以下代码:
```python
import cv2
import numpy as np
from skimage.segmentation import slic
from skimage.segmentation import mark_boundaries
# 读取图像
img = cv2.imread('image.jpg')
# 进行超像素分割
segments = slic(img, n_segments=100, compactness=10, sigma=1)
# 提取主体部分
mask = np.zeros(img.shape[:2], dtype="uint8")
for i in np.unique(segments):
segment_mask = np.zeros(img.shape[:2], dtype="uint8")
segment_mask[segments == i] = 255
cnts = cv2.findContours(segment_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnt = cnts[0] if len(cnts) == 2 else cnts[1][0]
if cv2.contourArea(cnt) > 1000: # 面积过小的区域去除
cv2.drawContours(mask, [cnt], -1, 255, -1)
# 将主体部分的边界画出来
marked = mark_boundaries(img, segments, color=(1, 0, 0))
marked[mask == 0] = 0
# 显示结果
cv2.imshow("Marked", marked)
cv2.waitKey(0)
```
这段代码使用了 `skimage` 库中的超像素分割方法 `slic`,并根据分割结果提取了主体部分。然后使用 `mark_boundaries` 方法将主体部分的边界画出来,并将其与原图叠加在一起。最终结果会显示出提取出来的主体部分,并用红色边框标出。您可以根据需要调整代码中的参数。
阅读全文