open cv图形矩

图像矩是计算机视觉中用于描述图像特征的算子,包括几何矩、中心矩和中心归一化矩。通过OpenCV的moments()函数可以计算图像的矩,用于确定对象的位置、面积和主轴等。同时,contourArea()计算轮廓面积,arcLength()计算轮廓弧长。这些方法常用于图像分析和模式识别。
摘要由CSDN通过智能技术生成

矩的概念介绍

1.矩是描述图像特征的算子

图形矩(Image Moments)- 求取图像质心,面积,长度

1.几何矩(空间矩)- P(x,y) —像素值,x,y x,yx,y表示像素点的位置,有各阶矩
空间矩的实质为面积或者质量。可以通过一阶矩计算质心/重心

2.中心矩- mu(ji)
中心矩体现的是图像强度的最大和最小方向(中心矩可以构建图像的协方差矩阵)
其只具有平移不变性,所以用中心矩做匹配效果不会很好

3.中心归一化矩- nu(ji)
归一化后具有尺度不变性

4.Hu矩
由于具有尺度、旋转、平移不变性,可以用来做匹配


中心矩计算公式

中心距与中心归一化距是几何矩的变种,矩用来对二值图像的轮廓进行计算从而得到图像的轮廓特征
弧矩(用来进行模式识别)…还有很多其他的矩

图像中心Center: 与对象的位置有关系,是对象的质心位置
Center(x_0, y_0)
x0=​m10/m00
y0=m01/m00

API介绍与使用cv::moments计算生成数据

图像矩计算API
moments()函数用来计算多边形和光栅形状的最高达三阶的所有矩
求出图像从1阶到3阶的所有图像矩用来计算形状的重心、面积、主轴和其他形状特征
得到的结果是存储了几何矩、中心距、中心归一化矩的结果
moments
(
InputArray array,//输入数据为findContours()计算出来的数据
bool binaryImage=false//是否为二值图像
)

计算出轮廓的面积(用来计算整个轮廓或部分轮廓的面积)
contourArea
(
InputArray contour,//输入轮廓数据
bool oriented//默认false,返回绝对值
)

计算出轮廓曲线的弧长(用来计算封闭轮廓的周长或曲线的长度)
arcLength
(
InputArray curve,//输入曲线数据
bool closed//是否是封闭曲线
)

步骤

  1. 转灰度cvtColor
  2. 提取图像边缘Canny
  3. 发现轮廓findContours
  4. 计算每个轮廓对象的矩moments
  5. 计算每个对象的中心、弧长、面积contourArea arcLength
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>
#include <math.h>

using namespace cv;
using namespace std;

Mat src, dst,srcgray;
int thre = 50,threMax=255;
int CSize;

int kksize = 1;
int dp = 1;
int mindist = 39;
int thlow = 100;
int thcp = 33;
int minr = 94;
int maxr = 157;
int Max = 250;

void Moment(int, void*);

int main()
{
   

	src = imread("D:/实验台/机器视觉/测试图片/硬币2.jpg");
	if (src.empty())//如果src这个数据库属性为空
	{
   
		cout << "无法打开" << endl;
		return -1;
	}
	imshow("原图", src);
	
	//检测不规则轮廓前要进行灰度处理和高斯模糊等预处理
	//cvtColor(src, srcgray, CV_BGR2GRAY);
	//GaussianBlur(srcgray, srcgray, Size(3, 3), 0, 0);

	namedWindow("图形矩", CV_WINDOW_AUTOSIZE);
	namedWindow("圆检测参数调节", CV_WINDOW_NORMAL);
	createTrackbar("阈值调节", "图形矩", &thre, threMax, Moment);
    createTrackbar("轮廓阈值", "图形矩", &CSize, threMax, Moment);
	
	createTrackbar("中值滤波核子大小", "圆检测参数调节", &kksize, Max, Moment);
	createTrackbar("检测尺度", "圆检测参数调节", &dp, Max, Moment);
	createTrackbar(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值