基于RexUniNLU的智能邮件分类系统:Outlook插件开发

核心内容摘要

wvp-GB28181-pro多节点部署与zlmediakit配置实战
国内激光设备�商全�测评:技术�力�选�指�

OpenClaw官方下载镜像解读:nanobot如何做到开箱即用、免编译、免依赖

OpenCV-Python 中图像矩特征的计算以及基于矩 / 轮廓 API 计算轮廓面积的方法图像矩是描述图像 / 轮廓几何特征的重要参数能反映目标的大小、位置、形状、方向等信息而轮廓面积是矩特征中最常用的基础指标同时 OpenCV 也提供了直接计算轮廓面积的专用 API下面会从矩的基础概念、矩的计算、轮廓面积的两种计算方法、矩的其他实用应用如质心、形状匹配展开结合轮廓操作实现实战代码内容贴合实际开发需求。

图像矩的核心概念图像矩是对图像像素值进行加权积分的结果针对二值图 / 轮廓的矩特征像素值仅为 0背景和 255/1前景因此矩能精准描述前景目标的几何特征。

OpenCV 中主要关注几何矩空间矩和中心矩衍生出归一化中心矩不受尺度、平移影响和Hu 矩不受尺度、平移、旋转影响用于形状匹配核心常用矩的含义几何矩mij​描述目标的位置和大小i为行阶数j为列阶数基础的 0 阶矩m00​直接对应轮廓 / 前景区域的面积中心矩μij​以目标质心为原点的矩消除了平移的影响归一化中心矩ηij​对中心矩做归一化消除了尺度和平移的影响Hu 矩由归一化中心矩推导而来共 7 个具有旋转不变性是形状匹配的核心特征。

对于轮廓而言OpenCV 计算的矩是基于轮廓点的离散矩与直接对图像像素计算的矩一致且更高效仅计算轮廓边界无需遍历所有像素。

核心 API 详解

计算矩cv

moments()专门用于计算图像 / 轮廓的各类矩几何矩、中心矩、归一化中心矩支持传入二值图像或轮廓数组推荐传轮廓效率更高。

函数原型moments_dict cv

moments(array, binaryImageFalse)关键参数array输入可传二值图像uint8或轮廓数组cv

findContours()返回的单个轮廓cntbinaryImage仅当传入灰度图 / 非纯二值图时生效设为True会自动将非 0 像素视为 1推荐传纯二值图 / 轮廓时设为默认False。

返回值moments_dict字典类型包含所有计算出的矩键为矩的名称如m

mu

eta11等值为矩的浮点型结果。

常用键值m000 阶几何矩核心值对应轮廓 / 前景面积m

m011 阶几何矩用于计算质心mu

mu

mu112 阶中心矩eta

eta

eta112 阶归一化中心矩。

计算轮廓面积cv

contourArea()OpenCV 提供的专用轮廓面积计算 API直接传入轮廓数组底层基于轮廓点的离散算法计算比通过cv

moments()的m00更高效少计算其他矩是实际开发的首选。

函数原型area cv

contourArea(cnt, orientedFalse)关键参数cnt单个轮廓数组cv

findContours()返回的轮廓元素oriented设为True时返回的面积带有符号反映轮廓的顺时针 / 逆时针方向设为False默认时返回绝对值面积日常使用选默认。

返回值area浮点型轮廓的面积值。

拓展Hu 矩计算cv

HuMoments()由cv

moments()的结果推导 7 个 Hu 矩用于形状匹配具有旋转不变性。

函数原型hu_moments cv

HuMoments(moments_dict)参数moments_dict为cv

moments()的返回字典返回值7×1 的浮点数组存储 7 个 Hu 矩。

计算轮廓面积的两种方法实战对比计算轮廓面积是矩特征的最基础应用有基于矩的方法cv

moments()的m00和专用 API 方法cv

contourArea()两种方法结果一致步骤为轮廓检测→分别计算面积→对比结果。

完整代码实现import cv2 import numpy as np #

图像预处理读取→灰度→去噪→二值化→形态学优化 img cv

imread(shape.jpg) if img is None: raise ValueError(图像读取失败请检查路径) gray cv

cvtColor(img, cv

COLOR_BGR2GRAY) blur cv

GaussianBlur(gray, (3,

,

# 二值化白色为前景黑色为背景 ret, binary cv

threshold(blur, 127, 255, cv

THRESH_BINARY) # 形态学闭运算填充前景孔洞优化轮廓 kernel cv

getStructuringElement(cv

MORPH_RECT, (3,

) binary_opt cv

morphologyEx(binary, cv

MORPH_CLOSE, kernel) #

查找轮廓仅外轮廓压缩点 contours, hierarchy cv

findContours(binary_opt.copy(), cv

RETR_EXTERNAL, cv

CHAIN_APPROX_SIMPLE) img_result img.copy() # 用于绘制结果 #

遍历轮廓分别用两种方法计算面积 for i, cnt in enumerate(contours): # 方法1基于矩特征 cv

moments() → m00 0阶矩面积 M cv

moments(cnt) area_moment M[m00] # 直接取0阶矩作为面积 # 方法2专用API cv

contourArea() 推荐更高效 area_api cv

contourArea(cnt) # 绘制轮廓和面积信息 cv

drawContours(img_result, [cnt], -1, (0, 255,

,

# 获取轮廓外接矩形确定文字绘制位置 x, y, w, h cv

boundingRect(cnt) # 绘制两种方法的面积值保留2位小数验证结果一致 text fMom:{area_moment:.2f} | API:{area_api:.2f} cv

putText(img_result, text, (x, y-

, cv

FONT_HERSHEY_SIMPLEX,

4, (0, 0,

,

# 打印控制台 print(f轮廓{i1} - 矩方法面积{area_moment:.2f} | API方法面积{area_api:.2f}) #

显示结果 cv

imshow(Original Image, img) cv

imshow(Binary Image, binary_opt) cv

imshow(Contour Area, img_result) cv

waitKey(

cv

destroyAllWindows() # 保存结果 cv

imwrite(contour_area_result.jpg, img_result)结果说明运行后控制台会输出类似内容两种方法的面积值完全一致轮廓1 - 矩方法面积

2

00 | API方法面积

2

00 轮廓2 - 矩方法面积

1

50 | API方法面积

1

50开发建议仅需计算轮廓面积时优先使用cv

contourArea()更高效若需要同时计算质心、形状矩等其他特征直接用cv

moments()一次计算获取所有矩信息避免重复调用 API。

矩特征的拓展实用应用通过cv

moments()的几何矩还能快速计算目标质心中心坐标这是矩特征的另一核心应用质心结合轮廓面积能实现目标的位置 大小双重描述代码无缝集成到上述轮廓遍历中。

计算轮廓质心中心坐标质心的(xc​,yc​)计算公式由 1 阶矩和 0 阶矩推导而来​​注意计算前需判断避免除以 0 错误排除面积为 0 的无效轮廓。

集成质心计算的代码修改上述轮廓遍历部分for i, cnt in enumerate(contours): M cv

moments(cnt) area_moment M[m00] area_api cv

contourArea(cnt) # 计算质心判断m00≠0避免除以0 if M[m00] 1e-5: # 浮点型用极小值判断非0 cx int(M[m10] / M[m00]) # 质心x坐标 cy int(M[m01] / M[m00]) # 质心y坐标 # 绘制质心红色实心圆半径2 cv

circle(img_result, (cx, cy), 2, (0, 0,

, -

# 绘制质心坐标 cv

putText(img_result, f({cx},{cy}), (cx5, cy), cv

FONT_HERSHEY_SIMPLEX,

3, (255, 0,

,

else: cx, cy 0, 0 # 原有绘制和打印代码...运行后每个轮廓的中心会出现红色实心圆同时显示质心坐标实现轮廓面积 质心位置的双重特征提取。

矩特征的高级应用Hu 矩实现形状匹配Hu 矩由归一化中心矩推导具有尺度不变、平移不变、旋转不变的特性是实现形状匹配的核心方法通过计算两幅图像轮廓的 Hu 矩再计算 Hu 矩的欧式距离 / 巴氏距离距离越小形状越相似。

形状匹配核心代码实战匹配两个形状的相似度import cv2 import numpy as np def get_hu_moments(img_path): 提取图像中前景轮廓的Hu矩 img cv

imread(img_path,

blur cv

GaussianBlur(img, (3,

,

ret, binary cv

threshold(blur, 127, 255, cv

THRESH_BINARY) contours, _ cv

findContours(binary.copy(), cv

RETR_EXTERNAL, cv

CHAIN_APPROX_SIMPLE) # 取面积最大的轮廓主目标 cnt max(contours, keycv

contourArea) M cv

moments(cnt) hu cv

HuMoments(M) # 对Hu矩取对数降低数值差异提升匹配精度 hu -np.sign(hu) * np.log10(np.abs(hu)) return hu, img, cnt # 读取待匹配的两张形状图像 hu1, img1, cnt1 get_hu_moments(shape_square.jpg) hu2, img2, cnt2 get_hu_moments(shape_square_similar.jpg) hu3, img3, cnt3 get_hu_moments(shape_circle.jpg) # 计算Hu矩的欧式距离距离越小形状越相似 dist12 np.linalg.norm(hu1 - hu

# 正方形和相似正方形 dist13 np.linalg.norm(hu1 - hu

# 正方形和圆形 # 绘制结果 img1 cv

cvtColor(img1, cv

COLOR_GRAY2BGR) img2 cv

cvtColor(img2, cv

COLOR_GRAY2BGR) img3 cv

cvtColor(img3, cv

COLOR_GRAY2BGR) cv

drawContours(img1, [cnt1], -1, (0,255,

,

cv

drawContours(img2, [cnt2], -1, (0,255,

,

cv

drawContours(img3, [cnt3], -1, (0,255,

,

cv

putText(img1, fDist12:{dist12:.4f}, (10,

, cv

FONT_HERSHEY_SIMPLEX,

5, (0,0,

,

cv

putText(img1, fDist13:{dist13:.4f}, (10,

, cv

FONT_HERSHEY_SIMPLEX,

5, (0,0,

,

# 拼接显示 img_match np.hstack((img1, img2, img

) cv

imshow(Shape Matching (Hu Moments), img_match) cv

waitKey(

cv

destroyAllWindows()结果说明正方形与相似正方形的 Hu 矩距离接近 0与圆形的距离远大于 0实现了精准的形状匹配。

六、

常见问题与解决方案计算质心时出现除以 0 错误原因检测到面积为 0 的无效轮廓噪声解决计算前增加判断浮点型避免精确 0或先通过cv

contourArea()筛选面积大于阈值的轮廓。

矩方法计算的面积为浮点型原因轮廓点的离散算法导致如斜向轮廓的面积会出现

5 的小数解决无需处理浮点型更精准若需要整数用int(area)取整即可。

Hu 矩匹配精度低原因Hu 矩原始数值差异大解决对 Hu 矩做对数变换-np.sign(hu)*np.log10(np.abs(hu))降低数值差异提升匹配精度。

二值图计算的矩与轮廓计算的矩不一致原因二值图前景有孔洞轮廓是闭合的解决对二值图做形态学闭运算填充孔洞或直接用轮廓计算矩推荐更高效且精准。

核心知识点

总结图像矩的核心0 阶几何矩m00直接对应轮廓 / 前景面积1 阶矩m10/m01用于计算质心轮廓面积的两种计算方法矩方法cv

moments(cnt)[m00]适合同时计算质心、形状矩等其他特征专用 APIcv

contourArea(cnt)更高效仅需计算面积时的首选矩的关键应用基础计算轮廓面积、质心坐标高级通过 Hu 矩cv

HuMoments()实现旋转 / 尺度不变的形状匹配前置条件计算矩 / 轮廓面积前必须做好图像预处理灰度→去噪→二值化→形态学优化确保二值图白色为前景、无孔洞轮廓闭合且无无效小轮廓。

矩特征是 OpenCV 中描述图像几何特征的基础结合轮廓检测能实现目标的大小、位置、形状等核心特征的提取广泛应用于目标检测、形状分析、工业检测等场景。

爱丫爱丫,爱丫爱丫全集免费-爱丫爱丫,爱丫爱丫全集免费应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123