糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > opencv 寻找轮廓线与轮廓线的交点 轮廓与圆的交点

opencv 寻找轮廓线与轮廓线的交点 轮廓与圆的交点

时间:2024-01-28 11:17:24

相关推荐

opencv 寻找轮廓线与轮廓线的交点  轮廓与圆的交点

opencv 寻找轮廓线与圆的交点

在项目过程中 我遇到了一个问题就是要求一段不规则轮廓线与一个圆的交点,网上查了一些资料,如果轮廓线是规则的话还能算出轮廓线的方程可以方便的解出交点,但是现在轮廓线是不固定的不规则的所以无法解析出轮廓线的方程, 那么我只能用最笨的办法,弄两个存放圆和轮廓的掩膜然后做 and 运算,找出数值是1 的店就是我要的交点了。

程序如下:

#计算轮廓和圆的交点,返回交点坐标。def get_contour_circle_intersection(contour,circle):'''计算轮廓和圆的交点,返回交点坐标。contour:轮廓circil:单通道灰度图'''mask = np.zeros(circle.shape, np.uint8) # 生成和circle 结构相同的掩膜cv2.drawContours(mask, [contour], -1, 255, 1) #画出轮廓dst=cv2.bitwise_and(mask,circle) #轮廓和圆的 与运算dst=cv2.dilate(dst, None) #膨胀获得的点res=get_corner(dst)#获得点的角点坐标return resdef get_corner(grayimg):"""角点测试 Demograyimg :为一个灰度图返回 res角点坐标,1,2是亚像素角点, 3,4是角点"""gray = np.float32(grayimg)cornerP = cv2.cornerHarris(gray, 3, 5, 0.04)cornerP[cornerP > 0] = 255#cornerP=cv2.dilate(cornerP,None) #膨胀ret, cornerP = cv2.threshold(cornerP, 0.01 * cornerP.max(), 255, 0) #阈值化二值化cornerP = np.uint8(cornerP)cv2.imshow('cornerP', cornerP)# 图像连通域ret, labels, stats, centroids = cv2.connectedComponentsWithStats(cornerP) #??????????# 迭代停止规则criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.001)corners = cv2.cornerSubPix(gray, np.float32(centroids), (5, 5), (-1, -1), criteria) #计算亚像素角点res = np.hstack((centroids[1:], corners[1:])) #列表 在水平方向上平铺res = np.int0(res) #列表取整return res

效果图:

上面角点坐标就是 轮廓和圆的交点坐标。

如果觉得《opencv 寻找轮廓线与轮廓线的交点 轮廓与圆的交点》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。