形状场景算法比较轮廓

形状场景算法

opencv3开始,有了专有模块shape,该模块中的形状场景算法能够更加有效的比较形状。

计算形状场景距离

opencv提供了使用距离作为形状比较的度量标准。这是因为形状之间的差异值和距离值有相似之处。比如两个形状一模一样时距离值和差值都等于0.
opencv提供了函数
cv2.creatShapeContextDistanceExtractor(),用于计算形状场景距离。其使用的形状上下文法在计算距离时,在每个点上附加一个形状上下文描述符,让每个点都能够捕获剩余点相对于它的分布特征,从而提高全局鉴别特征。
该函数的具体语法格式为:
retval = cv2.creatShapeContextDistanceExtractor(
[,nAngularBins[,nRadialBins[,innerRadius[,outerRadius[,iterations[,comparer[,transformer]]]]]]])
返回值为retval,返回结果可以通过函数cv2.ShapeDistanceExtractor.computeDistance(contour1,contour2)计算两个形状之间的距离
下面解释函数cv2.creatShapeContextDistanceExtractor()各个参数的意义
nAngularBins:为形状匹配中使用的形状上下文描述符建立的角容器的数量
nRadialBins:为形状匹配中使用的形状上下文描述符建立的径向容器的数量
innerRadius:形状上下文描述符的内半径
outerRadius:形状上下文描述符的外半径
iterlations:迭代次数
comparer:直方图代价提取因子
transformer:形状变化参数

一个例子,代码参考书目:opencv轻松入门:面向python

例程

import cv2

o1 = cv2.imread('cs.bmp')
cv2.imshow("original",o1)
gray1 = cv2.cvtColor(o1,cv2.COLOR_BGR2GRAY)
ret,binary1 = cv2.threshold(gray1,127,255,cv2.THRESH_BINARY)
contours1,hierarchy = cv2.findContours(binary1,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
cnt1 = contours1[0]


#原始图像o2的边缘
o2 = cv2.imread('cs3.bmp')
cv2.imshow("original2",o2)
gray2 = cv2.cvtColor(o2,cv2.COLOR_BGR2GRAY)
ret,binary2 = cv2.threshold(gray2,127,255,cv2.THRESH_BINARY)
contours2,hierarchy = cv2.findContours(binary2,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
cnt2 = contours2[0]


#原始图像o3的边缘
o3 = cv2.imread('lina.bmp')
cv2.imshow("original3",o3)
gray3 = cv2.cvtColor(o3,cv2.COLOR_BGR2GRAY)
ret,binary3 = cv2.threshold(gray3,127,255,cv2.THRESH_BINARY)
contours3,hierarchy = cv2.findContours(binary3,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
cnt3 = contours3[0]


#构造距离提取因子
sd = cv2.createShapeContextDistanceExtractor()
#计算距离
d1 = sd.computeDistance(cnt1,cnt1)
print("和自身的距离d1 = ",d1)
d2 = sd.computeDistance(cnt1,cnt2)
print("和旋转缩放后的自身图像距离d2 = ",d2)
d3 = sd.computeDistance(cnt1,cnt3)
print("和不相似的图像的距离d3 = ",d3)


cv2.waitKey()
cv2.destoryAllWindows()

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值