Python中常用的图像分割算法有基于阈值的分割算法、基于边缘的分割算法和基于区域的分割算法。以下是使用这些算法的示例代码:
- 基于阈值的分割算法(二值化):
import cv2 def threshold_segmentation(image, threshold): gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) _, binary = cv2.threshold(gray, threshold, 255, cv2.THRESH_BINARY) return binary image = cv2.imread('image.jpg') threshold = 127 segmented_image = threshold_segmentation(image, threshold) cv2.imshow('Segmented Image', segmented_image) cv2.waitKey(0) cv2.destroyAllWindows()
- 基于边缘的分割算法(Canny边缘检测):
import cv2 def edge_segmentation(image, min_threshold, max_threshold): gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) edges = cv2.Canny(gray, min_threshold, max_threshold) return edges image = cv2.imread('image.jpg') min_threshold = 100 max_threshold = 200 segmented_image = edge_segmentation(image, min_threshold, max_threshold) cv2.imshow('Segmented Image', segmented_image) cv2.waitKey(0) cv2.destroyAllWindows()
- 基于区域的分割算法(Felzenszwalb算法):
import cv2 import numpy as np def region_segmentation(image, scale, min_size): segments = cv2.ximgproc.segmentation.createGraphSegmentation() segments.setSigma(0.5) segments.setK(500) segments.processImage(image) result = segments.createSuperpixelMask() return result image = cv2.imread('image.jpg') scale = 0.1 min_size = 100 segmented_image = region_segmentation(image, scale, min_size) cv2.imshow('Segmented Image', segmented_image) cv2.waitKey(0) cv2.destroyAllWindows()
注意:以上示例代码中,image.jpg
是待分割的图像文件名,可以根据实际情况修改。同时,还需要安装OpenCV库,可以使用pip install opencv-python
命令进行安装。