OpenCV结构分析与形状描述符(22)计算图像中某个轮廓或区域的矩函数moments()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

计算一个多边形或光栅化形状直到三阶的所有矩。

该函数计算一个向量形状或光栅化形状直到三阶的矩。结果返回在 cv::Moments 结构中。

函数原型

cpp 复制代码
Moments cv::moments
(
	InputArray 	array,
	bool 	binaryImage = false 
)		

参数

  • 参数array 一个单通道的 8 位或浮点 2D 数组的光栅图像,或一个 1×N 或 N×1 的 2D 点(Point 或 Point2f)数组。
  • 参数binaryImage 如果为真,则所有非零图像像素被视为 1。该参数仅用于图像。

代码示例

cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>

int main()
{
    // 创建一个空白的图像
    cv::Mat image = cv::Mat::zeros( 300, 300, CV_8UC1 );  // 单通道8位图像

    // 在图像中间画一个白色的圆形作为轮廓
    cv::circle( image, cv::Point( 150, 150 ), 50, cv::Scalar( 255 ), -1 );

    // 查找图像中的轮廓
    std::vector< std::vector< cv::Point > > contours;
    cv::findContours( image, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE );

    // 计算轮廓的矩
    cv::Moments moments = cv::moments( contours[ 0 ] );

    // 从矩中计算质心
    double cx = moments.m10 / moments.m00;
    double cy = moments.m01 / moments.m00;

    // 计算面积
    double area = moments.m00;

    // 在图像上标记质心
    cv::circle( image, cv::Point( static_cast< int >( cx ), static_cast< int >( cy ) ), 5, cv::Scalar( 128 ), -1 );

   

    // 输出质心坐标和面积
    std::cout << "Centroid at (" << cx << ", " << cy << ")" << std::endl;
    std::cout << "Area: " << area << std::endl;
     // 显示图像
    cv::imshow( "Contour with Centroid", image );
    cv::waitKey( 0 );
    
    return 0;
}

运行结果

终端:

bash 复制代码
Centroid at (150, 150)
Area: 7704

图像:

相关推荐
深度学习lover几秒前
<数据集>蚜虫识别<目标检测>
人工智能·深度学习·yolo·目标检测·计算机视觉·蚜虫识别
孙启超3 分钟前
【AI开发之Rust】第 1 课:认识 Rust 与开发环境 —— 装好工具链,跑通第一个程序
开发语言·人工智能·后端·ai·rust·安全架构
桃西西呀6 分钟前
GPT-6 Astra 强到被锁起来:拆开它的 computer-use 架构、可搜索记忆与计费悬崖
人工智能·gpt·llm
开发笔记-阿牛7 分钟前
嵌入式蓝牙开发:AC2005B 芯片技术解析 —— 省晶振设计、13dBm 射频与 Auracast 广播音响开发指南
人工智能·单片机·音视频
大树889 分钟前
液冷系统的真正瓶颈,藏在那层不到1毫米的材料里
大数据·运维·服务器·人工智能·ai
ChampaignWolf12 分钟前
SAP 官方 ABAP MCP Server 正式落地:ABAP 开发进入 Agentic AI 时代
人工智能·sap·abap·人工智能ai·mcp
Beyond_System|系统之外17 分钟前
ChatGPT5.2_Codex_零基础图文手册
人工智能
码农哈丁19 分钟前
用 Trait 给系统留出后路:RAG 存储层如何做到 5 种后端可插拔
人工智能·知识图谱·rag
知几蜗牛23 分钟前
ChatGPT图像升级后,真正被改写的是创作工作流
人工智能
知几蜗牛29 分钟前
GPT‑6 Astra真正的变化:AI开始直接操作工作软件
人工智能