32-图形矩(Image Moments)

17- OpenCV:图像矩(Image Moments)和点多边形测试 主要介绍图像矩和点多边形测试的含义,以及相关api,和如何使用(有具体代码演示) 阅读详情

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

1、矩的概念;
2、API;
3、Code;

图形矩

1、几何矩: P(x,y) —像素值, x , y x,y x,y表示像素点的位置,有各阶矩;
2、中心距: m u ( j i ) mu_(ji) mu(​ji);
3、中心归一化距: n u ( j i ) nu_(ji) nu(​ji)

在这里插入图片描述

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

5、图像中心Center: 与对象的位置有关系,是对象的质心位置;
在这里插入图片描述
在这里插入图片描述
注: 这些值存储在Moment数据结构中

API

计算长度,面积,质心(实现图像的对象测量)
1、图像矩计算API : cv::moments() : 求出图像从1阶到3阶的所有图像矩;
array : 输入数据为findContours()计算出来的数据
2、面积计算API : contourArea() : 计算对象的面积;
3、弧长计算API : arcLength() : 计算对象轮廓的弧长(长度);
在这里插入图片描述

使用步骤

1、提取图像边缘(Canny算法);
2、发现轮廓;
3、计算每个轮廓图像的矩;
4、计算每个图像的中心,弧长,面积;

Code

注意: findContours找到的图像轮廓有很多,应使用for循环将轮廓数据进行全部处理

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

Mat src, gray_src;
int threshold_value = 50;
int threshold_max = 255;

const char *OUTPUT_WIN = "image moment demo";
const char *INPUT_WIN = "input image";

RNG rng(12345);

void Moments_Demo(int, void*);

int main(int argc, char** argv)
{
	src = imread("C:\\Users\\hello\\Desktop\\24.jpg");
	if (src.empty())
	{
		cout << "could not load the image..." << endl;
		return -1;
	}
	cvtColor(src, gray_src, CV_BGR2GRAY);
	GaussianBlur(gray_src, gray_src, Size(3, 3), 0, 0);  //降低图像的噪声,Canny算法对噪声比较敏感

	namedWindow(INPUT_WIN, WINDOW_AUTOSIZE);
	namedWindow(OUTPUT_WIN, WINDOW_AUTOSIZE);
	imshow(INPUT_WIN, gray_src);

	createTrackbar("Threshold value: ", INPUT_WIN, &threshold_value, threshold_max, Moments_Demo);
	Moments_Demo(threshold_value, 0);

	waitKey(0);
	return 0;
}

void Moments_Demo(int, void*)
{
	Mat canny_output;
	vector<vector<Point>> contours;
	vector<Vec4i> hierarchy;
	//边缘检测
	Canny(gray_src, canny_output, threshold_value, threshold_value * 2, 3, false);  //Sobel算子的大小3
	//发现轮廓
	findContours(canny_output, contours, RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(-1, -1));
	//对每个轮廓计算矩  初始化一下大小
	vector<Moments> contours_moments(contours.size());
	vector<Point2f> ccs(contours.size());  //中心位置

	for (size_t i = 0; i < contours.size(); i++)
	{
		if (contours[i].size() < 30)  //轮廓像素点少的不打印
		{
			continue;
		}
		contours_moments[i] = moments(contours[i], true);  //以函数返回值形式返回图形矩
		ccs[i] = Point(static_cast<float>(contours_moments[i].m10 / contours_moments[i].m00),
					static_cast<float>(contours_moments[i].m01 / contours_moments[i].m00));   //质心位置
	}
	//绘制中心位置

	//Mat drawImage = Mat::zeros(src.size(), CV_8UC3);
	Mat drawImage;
	src.copyTo(drawImage);
	for (size_t i = 0; i < contours.size(); i++)
	{
		Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
		printf("center point x : %.2f , y : %.2f\n", ccs[i].x, ccs[i].y);

		printf("contours %d area : %.2f ; arc length : %.2f\r\n",
				i, contourArea(contours[i], false), arcLength(contours[i], true));
		circle(drawImage, ccs[i],2, color, 2, LINE_8);  //圈出质心
		drawContours(drawImage, contours, i, color,2, LINE_8, hierarchy, 0, Point(0, 0)); //层次结构给hierarchy
	}
	imshow(OUTPUT_WIN, drawImage);   //显示图像

}

效果

图形矩可以有效的计算出图片中对象的面积,质心,长度数据:
在这里插入图片描述

在这里插入图片描述

【python】OpenCV—Image Moments 当 array 是点集时,函数会将这些点集当成轮廓中的顶点,把整个点集作为一条轮廓来处理,而不是将它们当成独立的点来看待。综上所述,cv2.moments 函数是 OpenCV 库中用于计算图像轮廓矩的重要工具,它提供了关于图像形状的重要信息,并广泛应用于形状分析、特征提取和形状识别等任务中。图像矩(Image moments)是指图像的某些特定像素灰度的加权平均值(矩),或者是图像具有类似功能或意义的属性。计算每个轮廓的质心,图片中所有像素点的横坐标除以图片的像素点个数(面积),结果为质心的横坐标。 阅读详情

相关推荐

OpenCV 4.8 轮廓中心点计算:3种方法对比与 cv2.moments 性能实测

本文详细对比了OpenCV 4.8中三种轮廓中心点计算方法:cv2.moments、最小外接矩形中心和PCA主成分分析,通过性能实测数据展示各方法在精度、速度和内存消耗上的差异。针对工业检测、自然图像处理等不同场景,提供了优化建议和实战代码示例,帮助开发者高效实现轮廓中心点计算。

weixin_30800987的博客 311

OpenCV + CPP 系列(廿八)图像矩(Image Moments)

文章目录一、简介Hu矩moments 计算生成数据二、演示 一、简介 图像识别的一个核心问题是图像的特征提取,简单描述即为用一组简单的数据(数据描述符)来描述整个图像,这组数据越简单越有代表性越好。良好的特征不受光线、噪点、几何形变的干扰,图像识别技术的发展中,不断有新的描述图像特征提出,而图像不变矩就是其中一个。 矩函数在图像分析中有着广泛的应用,如模式识别、目标分类、图像编码与重构等。从一幅数字图形中计算出来的矩集,通常描述了该图像形状的全局特征,并提供了大量的关于该图像不同类型的几何特性信息,比如大小

红叶谷 wsp_1138886114的博客 728

从Arduino到ROS2:机器人视觉巡线项目实战与DFRobot生态解析

机器人开发是一个融合了感知、决策与控制的技术领域,其核心在于构建一个能够与环境交互的智能系统。从基础概念上讲,机器人通过传感器(如摄像头、红外传感器)感知环境,通过微控制器(如Arduino)或单板计算机(如树莓派)运行算法进行决策,最终通过执行器(如舵机、电机)完成动作。其技术价值在于将抽象的算法转化为可运行的物理实体,实现自动化任务。在应用场景上,从简单的Arduino循迹小车到复杂的人形机器人导航,机器人技术正广泛应用于教育、竞赛、工业及服务领域。本文以DFRobot创客生态为背景,深入探讨了如何利用

weixin_33714884的博客 383

OpenCV-图像处理(31、图像矩(Image Moments))

矩的概念介绍 可以参考:https://blog.youkuaiyun.com/keith_bb/article/details/70197104 几何矩( 其中P(i,j)为图像在坐标点(i,j)处的灰度值。) 中心距 中心归一化距 其中:图像中心Center(x0, y0)。 此非图像坐标的中心点,而是图像 质 的中心,质点 API介绍与使用 – cv::moments 计算生成数据 API介...

Micheal 超 的博客 3311

Unity集成OpenCVForUnity:从安装到实时图像处理实践指南

计算机视觉作为人工智能的重要分支,通过算法让机器“看懂”图像与视频。其核心原理涉及图像采集、预处理、特征提取与模式识别等技术环节。在游戏开发、增强现实、工业检测等领域,实时图像处理能力能极大提升交互体验与自动化水平。OpenCV作为开源计算机视觉库,提供了丰富的图像处理函数,而OpenCVForUnity插件则架起了Unity引擎与OpenCV之间的桥梁。通过封装核心功能为C#脚本,开发者可在Unity中直接调用OpenCV进行灰度化、边缘检测等操作,并实现摄像头实时处理与3D场景联动。本文聚焦OpenCV

weixin_34121304的博客 378

电赛视觉实战:OpenCV二值化与矩形识别全流程解析

图像二值化是计算机视觉中的基础预处理技术,其原理是通过设定阈值将灰度图像转换为黑白二值图像,从而简化后续处理。这一技术能有效减少计算复杂度,突出形状特征,在目标检测和模式识别中具有重要价值。在实际工程应用中,二值化质量直接影响轮廓提取的准确性,特别是在电子设计竞赛等需要快速稳定识别几何形状的场景中。OpenCV提供了全局阈值和自适应阈值两种核心方法,其中自适应阈值能更好地应对光照不均的现场环境。通过合理选择二值化参数并结合形态学操作优化,可以显著提升矩形等几何形状的识别成功率。本文以电子设计竞赛中的矩形识别

weixin_33896726的博客 363

【第二部分 图像处理】第3章 Opencv图像处理进阶【4 图像轮廓D】

3.4图形的矩 矩函数有着广泛的应用,如模式识别、目标跟踪、模式识别等。下面笔者就带领大家一起揭开其神秘的面纱。 3.4.1图像的矩相关API 3.4.1.1图像的矩形API讲解  矩的计算:moments()函数 C++: Moments moments( InputArray array, bool binaryImage...

不问归期的博客 1964

手术机器人技术栈深度解析:从运动控制到三维视觉的工程实践

机器人技术栈是现代智能系统的核心,它融合了运动学、计算机视觉、实时控制和人机交互等多个领域。其基本原理是通过传感器感知环境,经由算法进行决策规划,最终通过执行器完成精准操作。这一技术体系的价值在于将人类的智能与机器的稳定性、精确性相结合,极大地拓展了在复杂场景下的自动化能力。在医疗科技领域,手术机器人是这一技术栈的集大成者,它通过集成机械臂控制、三维视觉成像和主从控制等模块,实现了微创手术的精准化与智能化。本文以手术机器人为具体载体,深入探讨了其核心模块的技术实现,包括基于ROS和Gazebo的仿真环境搭建

weixin_34184158的博客 502

从找图到状态识别:自动化测试中UI元素选中判断的工程实践

在自动化测试和RPA流程中,UI元素状态识别是核心需求。传统基于像素的模板匹配方法在应对分辨率变化、主题切换时鲁棒性不足。计算机视觉技术通过特征提取与模式识别,能够更稳定地理解界面元素的视觉语义。结合颜色空间分析、轮廓检测与多尺度匹配等算法,可以构建从图像特征到状态判定的可靠流程。这种技术方案在软件自动化测试、游戏辅助工具和跨平台UI监控等场景中具有重要价值。本文以复选框选中状态检测为例,探讨了如何通过OpenCV特征分析和多策略融合,解决实际工程中的UI状态识别难题,提升自动化脚本的稳定性和泛化能力。

weixin_34099526的博客 385

OpenCV-Python实战(10)——详解 OpenCV 轮廓检测

在计算机视觉领域,轮廓通常指图像中对象边界的一系列点。因此,轮廓通常描述了对象边界的关键信息,包含了有关对象形状的主要信息,该信息可用于形状分析与对象检测和识别。在本文中,将首次通过简单示例了解轮廓的基本概念,然后通过实际示例来了解如何检测和压缩轮廓,最后利用介绍如何利用图像矩描述检测到的轮廓属性。

盼小辉丶的博客 3万+

OpenCV-Python实战(11)——OpenCV轮廓检测相关应用

在计算机视觉领域,轮廓通常指图像中对象边界的一系列点。因此,轮廓通常描述了对象边界的关键信息,包含了有关对象形状的主要信息,该信息可用于形状分析与对象检测和识别。在本文中,我们将学习如何利用获取到的轮廓,进行形状分析以及对象检测和识别。

盼小辉丶的博客 1万+

skimage图像处理(全)

skimage(全称scikit-image):是一个基于 scipy 和 numpy 构建的,专注于图像处理和计算机视觉的Python库。提供了一系列用于图像处理函数,包括图像滤波、边缘检测、图像分割、特征提取、图像配准等。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 6188

LCD驱动芯片——BL55072A驱动程序

初始化子程序: START 0x7C; I2C子地址 0xEA;ICSET,软件复位芯片 0xC0;MODSET,关显示 0xF0;BLKCTL,关闪烁 0xA3;DISCTL,80Hz Line inversion,High Power mode 0xE8;ICSET,清复位bit1 STOP 显示刷新子程序: START 0x7C;I2C子地址 0xF0;BLKCTL,关闪烁 0xA3;DISCTL,80Hz Line inversion,High Power mode 0xE8或0xEC;ICSE

love421的博客 3175

千元级开源机械臂:低成本实践具身智能的完整指南

具身智能(Embodied AI)是人工智能与物理世界交互的关键领域,其核心在于让智能体通过传感器感知环境并执行物理动作,从而完成复杂任务。其技术原理通常遵循“感知-决策-执行”的经典控制循环,其中机械臂作为核心的执行器,是实现从算法到实体应用的关键载体。这项技术的价值在于弥合了数字智能与物理操作之间的鸿沟,为机器人学、自动化及高级AI研究提供了真实的验证平台。其应用场景广泛,涵盖工业分拣、实验室自动化、康复辅助及前沿的AI算法验证。本文聚焦于如何通过一套全链路开源的**低成本机械臂**方案,结合**ROS

weixin_34015336的博客 489

ArcGIS实战:用栅格数据为偏远山区规划一条最省钱的公路(附完整数据与操作步骤)

本文详细介绍了如何利用ArcGIS进行栅格数据分析,为偏远山区规划一条最省钱的公路。通过DEM高程数据处理、成本权重设定和最佳路径计算,结合真实案例展示了从数据准备到工程方案转化的完整流程,帮助工程师在复杂地形中做出经济高效的路线决策。

weixin_32136203的博客 356

8台 × 8卡 910B NPU之顶尖大模型选型分析

本文对比了2026年主流大语言模型在昇腾910B NPU集群上的部署方案。重点评估了GLM5、MiniMax M2.5、Kimi K2.5、DeepSeek V3.2和Qwen 3.5旗舰版等候选模型,从部署需求(显存占用)、能力表现(基准测试、多模态支持)和NPU生态适配度三个维度进行分析。结果显示DeepSeek V3.2综合表现最优:支持BF16/W8A8/INT4量化,在4TB显存环境下可实现2000+ TPS,首token延迟<100ms,且具备官方NPU支持。备选方案Qwen 3.5旗舰版

FeelTouch Labs 754

在行空板上部署MediaPipe实现实时人像分割与抠图

图像分割是计算机视觉中的基础任务,旨在将图像划分为多个有意义的区域。其核心原理是通过深度学习模型学习像素级分类,区分前景与背景。这项技术的价值在于为高级视觉应用提供精细化处理能力,广泛应用于视频会议虚拟背景、互动媒体、安防监控等场景。其中,边缘计算部署能够实现低延迟、高隐私的实时处理。本文聚焦于在行空板这类嵌入式设备上,利用MediaPipe框架的轻量级Selfie Segmentation模型,结合TensorFlow Lite运行时,构建一个离线可用、实时运行的人像抠图系统,并详细阐述了从环境搭建、模型

weixin_30550081的博客 391

从零开始:用YOLOv8-Pose实现实时人体姿态检测(附完整代码)

本文提供了一份从零开始的完整实战指南,详细介绍了如何使用YOLOv8-Pose构建实时人体姿态检测系统。内容涵盖环境搭建、数据准备、模型训练与调优,以及高性能部署和进阶应用开发,并附有可直接运行的代码示例,帮助开发者快速掌握Pose Estimation技术并将其应用于实际项目。

h6i7j8的博客 620

C++小技巧汇总(更新)

【代码】C++小技巧汇总(更新)

m0_58709899的博客 98

STM32 RTC_WaitForSynchro()死循环问题分析与LSI时钟优化实践

本文深入分析了STM32使用LSI时钟源时,调用RTC_WaitForSynchro()函数陷入死循环的根本原因。问题核心在于RTC时钟域未正确使能,导致硬件同步标志RSF无法置位。文章提供了通过显式调用RCC_RTCCLKCmd(ENABLE)函数启用RTC时钟总开关的解决方案,并分享了编写健壮RTC/BKP初始化代码、增加超时机制等最佳实践,确保系统稳定运行。

weixin_29185493的博客 510

[ESP32]:基于esp-modbus实现serial主机

[ESP32]:基于esp-modbus实现serial主机

LINKKEEE的博客 2567

基于BeagleBone Black与OpenCV的视觉循迹小车全链路开发指南

计算机视觉与嵌入式系统结合,是实现智能感知与控制的关键技术。其原理是通过摄像头等传感器采集环境信息,利用图像处理算法提取特征,再通过控制算法驱动执行机构。这项技术的核心价值在于让机器具备“视觉”能力,实现自主决策与运动,是机器人、自动驾驶等领域的基石。在工程实践中,常采用嵌入式平台如BeagleBone Black作为计算核心,搭配OpenCV库进行实时图像处理,并通过PID等控制算法实现精准运动。本文聚焦于一个典型的应用场景——自主循迹小车,详细阐述了如何从硬件选型、软件环境搭建、图像处理流水线设计到PD

weixin_34302798的博客 432

如何对正射影像DOM(卫星影像、无人机航拍影像)进行拼接、合并以及去黑边(附 Global Mapper Pro 24.0 安装包(中文注册版))

为什么要对正射影像DOM进行拼接?影像去黑边、影像拼接的操作和步骤。

从地图看世界的专栏 4298

从零构建红外追踪系统:低成本高精度6DOF定位方案全解析

红外追踪系统是一种基于计算机视觉和立体视觉原理,通过捕捉特定红外标记点来实现物体在三维空间中六自由度(6DOF)姿态实时定位的技术。其核心原理是利用多个红外摄像头同步采集图像,通过图像处理算法提取标记点二维坐标,再结合相机标定参数和多视图几何进行三维重建,最终解算出物体的精确位置和旋转。这项技术在机器人定位、无人机导航、虚拟现实(VR)交互和动作捕捉等领域具有重要价值,能够为各类需要高精度空间感知的应用提供核心数据。本文以红外追踪系统为主题,深入剖析了其从硬件选型(如摄像头改造、同步机制)、核心算法(相机标

weixin_34279246的博客 393

【原创】汇川H5U PLC控制伺服的方法

6、在线调试-进入伺服调试,可以在本软件上进行调试,可以实现原点回归、正向点动、反向电动、使能(这里使能打开时触摸屏上的使能不能打开,会冲突)、复位、停止(如下图所示)。5、在原点返回设置中一般情况下对原点信号、正限位、负限位、原点返回方向、原点返回方式进行设置,其他设置默认不改(如下图所示)。3、在单位换算设置上只需要修改脉冲数和移动量(根据伺服配套导轨上名牌进行设置),其他设置默认不改(如下图所示)。11、双击后右边出现编辑框 在上半部分定义变量(IN、INOUT、OUT、VAR)(如下图所示)。

Qinmingyue13的博客 6662

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: 31-轮廓周围绘制矩形框和圆形框
下一篇: 33-点多边形测试
hellohake
博客等级 码龄10年 4543粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值