处理图片:[cs1.jpg]
import cv2
def point_contour_dist(img, hull, point, text, measure_dist=True):
"""点与轮廓hull的距离
:param img: 绘制结果图片
:param hull: 轮廓hull
:param point: 计算的点
:param text: 文本距离
:param measure_dist: 计算结果方式
:return: 距离
"""
dist = cv2.pointPolygonTest(hull, point, measure_dist)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, text, point, font, 1, (0, 255, 0), 3)
print("dist%s=" % text, dist)
return dist
def main():
# 1.导入图片
img_src = cv2.imread("cs1.jpg")
# 2.灰度化,二值化
img_gray = cv2.cvtColor(img_src, cv2.COLOR_BGR2GRAY)
ret, img_bin = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
# 3.连通域分析
img_bin, contours, hierarchy = cv2.findContours(img_bin,
cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE)
# 4.计算hull并且显示
hull = cv2.convexHull(contours[0])
img_result = cv2.cvtColor(img_bin, cv2.COLOR_GRAY2BGR)
cv2.polylines(img_result, [hull], True, (0, 255, 0), 2)
# 5.计算点与轮廓hull之间的距离
point_contour_dist(img_result, hull, (300, 150), "A")
point_contour_dist(img_result, hull, (300, 250), "B")
point_contour_dist(img_result, hull, (464, 122), "C")
# 6.显示结果图片
cv2.imshow("img_src", img_src)
cv2.imshow("img_result", img_result)
cv2.imwrite("img_result.jpg", img_result)
cv2.waitKey()
cv2.destroyAllWindows()
if __name__ == '__main__':
main()
处理结果图片:[img_result.jpg]
处理结果: