👨💻个人简介: 深度学习图像领域工作者
🎉总结链接:
链接中主要是个人工作的总结,每个链接都是一些常用demo,代码直接复制运行即可。包括:
📌1.工作中常用深度学习脚本
📌2.torch、numpy等常用函数详解
📌3.opencv 图片、视频等操作
📌4.个人工作中的项目总结(纯干活)
链接: https://blog.csdn.net/qq_28949847/article/details/128552785
🎉视频讲解: 以上记录,通过B站等平台进行了视频讲解使用,可搜索 ‘Python图像识别’ 进行观看
B站:Python图像识别
抖音:Python图像识别
西瓜视频:Python图像识别
1、cv2.pointPolygonTest() 函数
函数定义:
cv2.pointPolygonTest(contour, pt, measureDist)
函数功能:
找到图像里的点和轮廓之间的最短距离. 它返回的距离当点在轮廓外的时候是负值,当点在轮廓内是正值,如果在轮廓上是0。
参数:
contour :轮廓多边形
pt :坐标点
measureDist:若为True,返回带符号的距离;若为False,会找点是否在内,外,或轮廓上(相应返回+1, -1, 0)。
注意:
contour 传入的是np格式的数据
示例代码:
import cv2
import numpy as np
def onmouse_pick_points(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
print('x = %d, y = %d' % (x, y))
# 判断点是否在区域内
flag = cv2.pointPolygonTest(pts, (x, y), False)
if flag >= 0:
color = (0, 255, 0)
else:
color = (0, 0, 255)
cv2.drawMarker(param, (x, y), color)
if __name__ == '__main__':
WIN_NAME = 'pick_points'
# 凸形状区域
# pts = np.array([[25, 70], [25, 160],
# [110, 200], [200, 160],
# [200, 70], [110, 20]],
# np.int32)
# 凹形状
pts = np.array([[100, 100], [400, 100],
[400, 200], [150, 200],
[150, 450], [400, 450],
[400, 550], [100, 550]],
np.int32)
pts = pts.reshape((-1, 1, 2))
image = np.zeros((800, 800, 3), np.uint8)
cv2.namedWindow(WIN_NAME, 0)
cv2.setMouseCallback(WIN_NAME, onmouse_pick_points, image)
cv2.polylines(image, [pts], True, (255, 255, 255), 3)
while True:
cv2.imshow(WIN_NAME, image)
key = cv2.waitKey(1)
if key == 27:
break
cv2.destroyAllWindows()
效果展示:
凹形状区域,红色十字架代表在区域外,绿色代表在区域内

凸形状区域:


该文介绍了如何使用OpenCV中的cv2.pointPolygonTest()函数来检测图像中的点相对于轮廓的位置,包括点在轮廓内、外或轮廓上的情况。文章提供了示例代码,展示了一个鼠标点击事件,用于判断点击的点是否在指定的多边形区域内,并用不同颜色标记结果。

3352

被折叠的 条评论
为什么被折叠?



