概述
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 res
def get_corner(grayimg):
"""角点测试 Demo
grayimg :为一个灰度图
返回 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 寻找轮廓线与轮廓线的交点, 轮廓与圆的交点的全部内容,希望文章能够帮你解决opencv 寻找轮廓线与轮廓线的交点, 轮廓与圆的交点所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复