OpenCV Python ōćō如何找到图像中点与轮廓之间的最短距离?
介绍
OpenCV是一个免费开源的计算机视觉库,支持各种编程语言,包括C++、Python等常见语言。OpenCV库中提供了一些常用的功能函数,如图像读取、图像处理、特征提取等,方便我们快速开发各种计算机视觉应用,比如人脸检测、物体识别等。
在本篇文章中,我们将介绍如何使用Python语言的OpenCV库来找到图像中点与轮廓之间的最短距离。
准备工作
为了完成这个任务,我们需要安装好Python和OpenCV库。安装过程在这里不再赘述,可以去官网下载安装包并按照官方文档进行安装。
示例代码
接下来,我们将给出一个完整的Python示例代码来实现找到图像中点与轮廓之间的最短距离的功能。
import cv2
import numpy as np
# 读取图像
img = cv2.imread('img.png')
# 将图像转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理
ret, threshold = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, hierarchy = cv2.findContours(threshold, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 画出最大轮廓
cnt = max(contours, key=cv2.contourArea)
cv2.drawContours(img, [cnt], 0, (0, 255, 0), 3)
# 计算轮廓中心
M = cv2.moments(cnt)
cx = int(M['m10'] / M['m00'])
cy = int(M['m01'] / M['m00'])
# 创建掩膜
mask = np.zeros(threshold.shape, np.uint8)
cv2.drawContours(mask, [cnt], 0, 255, -1)
# 计算距离变换
dist_transform = cv2.distanceTransform(mask, cv2.DIST_L2, 5)
# 获取最短距离
distance = dist_transform[cy][cx]
# 输出结果
print("最短距离为:", distance)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
上述代码中,我们首先读取了一张图片,并将其转换为灰度图。然后对灰度图进行二值化处理,并查找其轮廓。我们在这里使用了OpenCV提供的cv2.findContours()
函数,该函数可以返回图像中所有轮廓的坐标列表。接着,我们对通过上一步得到的所有轮廓进行排序,并找到最大轮廓。然后计算最大轮廓的中心坐标,并创建一个掩膜,将最大轮廓填充为白色,背景部分为黑色。接下来,我们通过cv2.distanceTransform()
函数可以计算出掩膜中每个像素点离最近的白色像素点的距离,从而得到最短距离。
结论
通过以上示例代码,我们用Python语言的OpenCV库实现了找到图像中点与轮廓之间的最短距离的功能。这是一个我们在计算机视觉应用中经常需要用到的功能,例如物体距离检测、图像分割等。通过这篇文章的学习,我们可以更加熟练地掌握Python语言的OpenCV库的应用方法。