喜欢算法的女青年

opencv2.4.13+python2.7学习笔记--OpenCV中的图像处理--图像轮廓特征和几何矩

阅读对象:对概率论中的期望有一点了解。

1.图像几何矩

1.1简述

图像的几何矩包括空间矩、中心矩和中心归一化矩。几何矩具有平移、旋转和尺度不变性,一般是用来做大粒度的区分,用来过滤显然不相关的图像。

1.2用数学语言阐述图像的几何矩

针对于一幅图像,我们把像素的坐标看成是一个二维随机变量(X,Y),那么一幅灰度图像可以用二维灰度密度函数来表示,每个像素点的值可以看成是该处的密度,对某点求期望就是该图像在该点处的矩(原点矩),一阶矩和零阶矩可以计算某个形状的重心,二阶矩可以计算形状的方向,因此可以用矩来描述灰度图像的特征。3中矩的计算结果见图2。

图1 数学表示

1.3opencv中求矩的函数

 
class Moments { public: ......
  // 空间矩
double m00, m10, m01, m20, m11, m02, m30, m21, m12, m03;
// 中心矩
double mu20, mu11, mu02, mu30, mu21, mu12, mu03;
// 中心归一化矩 double nu20, nu11, nu02, nu30, nu21, nu12, nu03;
 }

2.图像轮廓特征和几何矩案例

'''
轮廓特征
• 查找轮廓的不同特征,例如面积,周长,重心,边界框等。
'''
import cv2
dir='C:/Users/Thinkpad/Desktop/picture/'
img = cv2.imread(dir + 'q.jpg',0)
ret,thresh = cv2.threshold(img,127,255,0)
contours,hierarchy = cv2.findContours(thresh, 1, 2)
cnt = contours[0]#取第一个轮廓
M = cv2.moments(cnt)#计算矩
cx = int(M['m10']/M['m00'])#计算重心
cy = int(M['m01']/M['m00'])#计算重心
#轮廓的面积可以使用函数 cv2.contourArea() 计算得到,也可以使用矩(0 阶矩) ,M['m00']
area = cv2.contourArea(cnt)
#轮廓周长也被称为弧长。可以使用函数 cv2.arcLength() 计算得到。这个函数的第二参数可以用来指定对象的形状是闭合的(True) ,还是打开的(一条曲线)
perimeter = cv2.arcLength(cnt,True)

图2 Opencv+python中矩计算结果的展现形式

参考资料:

http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_contours/py_contours_begin/py_contours_begin.html#contours-getting-started

http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_contours/py_contour_features/py_contour_features.html

http://www.cnblogs.com/skyseraph/archive/2011/07/19/2110183.html

http://blog.csdn.net/gdfsg/article/details/51015066

 

end!!

 

 

 

 

 

 

 

 

posted on 2017-03-16 01:00  喜欢算法的女青年  阅读(3122)  评论(0编辑  收藏  举报

导航