社交网站模板,郓城网站制作,网站托管服务内容,公众号开发免费import cv2
import numpy as np# 读取图像#xff0c;这里添加了判断图像是否读取成功的逻辑
img cv2.imread(./640.png)
# 灰度图
gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 高斯模糊
gray cv2.GaussianBlur(gray, (5, 5), 0)
# 二值化
ret, binary cv2… import cv2
import numpy as np# 读取图像这里添加了判断图像是否读取成功的逻辑
img cv2.imread(./640.png)
# 灰度图
gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 高斯模糊
gray cv2.GaussianBlur(gray, (5, 5), 0)
# 二值化
ret, binary cv2.threshold(gray, 115, 255, cv2.THRESH_BINARY)
kernel np.ones((5, 5), np.uint8)
# 开运算
binary cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel, iterations1)cv2.imshow(thres, binary)
cv2.waitKey(0)
cv2.destroyAllWindows()# 距离变换
dist cv2.distanceTransform(binary, cv2.DIST_L2, 3)
# 对二值图像进行距离变换操作使用cv2.distanceTransform函数计算图像中每个非零像素到最近的零像素的距离
# 参数cv2.DIST_L2表示使用欧几里得距离也可以选择其他距离度量方式参数3表示距离变换的掩码大小
# 得到的dist结果是一个单通道图像其像素值表示对应的距离信息该操作常用于图像分割等场景中帮助区分不同区域的边界等。dist_out cv2.normalize(dist, 0, 1.0, cv2.NORM_MINMAX)
# 对距离变换得到的图像进行归一化处理使用cv2.normalize函数将像素值归一化到0到1.0的范围
# 方便后续基于归一化后的距离值进行阈值处理等操作采用cv2.NORM_MINMAX归一化类型表示将最小值映射到0最大值映射到1.0。cv2.imshow(distance-Transform, dist_out*100)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 显示归一化后的距离变换图像为了更直观地查看距离信息将归一化后的图像像素值乘以100进行放大显示只是为了视觉效果更好ret, surface cv2.threshold(dist_out, (0.35 * dist_out.max()), 255, cv2.THRESH_BINARY)
# 对归一化后的距离变换图像进行阈值处理确定图像中的前景区域这里使用cv2.threshold函数
# 注意阈值参数的计算先通过(0.35 * dist_out.max())计算出具体的阈值数值原代码此处计算方式有误需先算出具体值再传入函数
# 大于该阈值的像素设置为255白色表示属于前景区域小于等于该阈值的像素设置为0黑色处理后的图像surface表示初步确定的前景区域。print(surface)
cv2.imshow(123, surface)
cv2.waitKey(0)
cv2.destroyAllWindows()# 乘回来、转格式、
img_1 (surface*255).astype(np.uint8)
# 轮廓查询
# print(cv2.RETR_LIST, cv2.RETR_EXTERNAL, cv2.RETR_CCOMP, cv2.RETR_TREE)
contours, hierarchy cv2.findContours(img_1, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)for cnt in contours:# 精准绘制轮廓cv2.drawContours(img, [cnt], -1, (0, 255, 0), 1)cv2.imshow(1, img)
cv2.waitKey(0)