矩(moment) 是概率与统计中的一个概念,是随机变量的一种数字特征,是对变量分布和形态特点的一组度量。
矩的定义如下:
其中,f(x) 是随机变量的概率密度函数或概率质量函数,n 是正整数表示矩的阶数。
矩可以用来描述变量的均值、方差、偏度、峰度等特性。矩的性质如下:
零阶矩是变量的均值。
一阶矩是变量的均方根。
二阶矩是变量的方差。
三阶矩是变量的偏度。
四阶矩是变量的峰度。
在图像处理中,图像的矩是指图像的某些特定像素灰度的加权平均值,或者是图像具有类似功能或意义的属性。图像矩可以表示图像的一些特征,通过这些特征便于对图像进行识别。
Part11. 空间矩/几何矩
空间矩是图像矩特征中最基本的一种,它只考虑图像的像素值。
其中,f(x,y) 表示输入的图像,p、q 是正整数。
11.1 零阶矩
零阶矩可以用来描述图像的面积。
21.2 一阶矩
一阶矩可以用来描述图像的质心。
31.3 二阶矩
二阶矩可以用来描述图像的周长、长轴、短轴、扭矩等信息。
41.4 三阶矩
下面的代码找到图像中的有效轮廓后,通过 moments() 函数计算轮廓的空间矩。
#include <iostream>
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
using namespace std;
using namespace cv;
bool ascendSort(vector<Point> a,vector<Point> b)
{
return contourArea(a) > contourArea(b);
}
int main(int argc, char **argv) {
Mat src = imread("/Users/Tony/OpenCV_Learning/2.11/test.jpg");
imshow("src", src);
Mat gray,thresh;
cvtColor(src, gray, cv::COLOR_BGR2GRAY);
threshold(gray,thresh,0,255,THRESH_BINARY_INV | THRESH_OTSU);
imshow("thresh", thresh);
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(thresh, contours, hierarchy, RETR_EX