opencv求质心

// 【1】读入一张图片,载入图像
Mat srcImage = imread("13.jpg");
cvtColor(srcImage, srcImage, CV_BGR2GRAY);
threshold(srcImage, srcImage, 180, 255, CV_THRESH_BINARY);
// namedWindow("binaryImage");
vector> vecAllContours;
findContours(srcImage, vecAllContours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);

Mat contourImage(srcImage.size(), CV_8UC1, Scalar(0));
drawContours(contourImage, vecAllContours, -1, Scalar(255), 2);
namedWindow("contourImage");
imshow("contourImage", contourImage);

vector >::const_iterator itc = vecAllContours.begin();
for (; itc != vecAllContours.end(); itc++)
{
if (itc->size() > 5)
{
Moments mom = moments(Mat(*itc));
int x = mom.m10 / mom.m00;
int y = mom.m01 / mom.m00;
cout << "x :" << x << endl;
cout << "y :" << y << endl;
}
}

 

### 如何使用OpenCV计算图像中对象的质 要计算图像中对象的质,可以利用OpenCV中的轮廓检测功能以及几何特性分析方法。以下是具体实现方式: #### 轮廓提取与质计算原理 在计算机视觉领域,质通常被定义为目标区域像素分布的重位置。对于二值化后的图像,可以通过查找目标物的轮廓并基于其矩(moments)来获取质坐标[^1]。 #### 实现步骤说明 为了完成这一操作,需依次执行以下逻辑处理流程: - 将输入彩色图片转换成灰度图; - 对灰度图进行阈值分割得到二值化图像; - 使用`findContours()`函数找出所有封闭边界; - 针对每个独立闭合形状调用`cv2.moments()`求取该图形的一阶矩M_10, M_01 和零阶矩M_00; - 利用公式 \( c_x = \frac{m_{10}}{m_{00}}, c_y=\frac{m_{01}}{m_{00}}\) 计算出对应形体的质位置; 下面是完整的Python代码示例展示上述过程: ```python import cv2 import numpy as np # 加载原始图像 image = cv2.imread('object.jpg') gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 应用边缘保留滤波器和自适应阈值处理 blurred = cv2.GaussianBlur(gray, (5, 5), 0) _, thresh = cv2.threshold(blurred, 60, 255, cv2.THRESH_BINARY_INV) # 查找轮廓 contours, _ = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2:] for contour in contours: # 计算当前轮廓的矩 moments = cv2.moments(contour) if moments["m00"] != 0: cx = int(moments['m10'] / moments['m00']) # X轴上的质坐标 cy = int(moments['m01'] / moments['m00']) # Y轴上的质坐标 # 绘制圆圈标记质 cv2.circle(image, (cx, cy), 7, (0, 255, 255), -1) # 显示质坐标于屏幕上 cv2.putText(image, f"centroid ({cx},{cy})", (cx - 25, cy - 25), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2) # 展示最终结果 cv2.imshow("Image", image) cv2.waitKey(0) ``` 此脚本会读入一张名为'object.jpg'的照片,在其中识别物体并将它们各自的质标注出来[^2]。 ### 注意事项 当实际部署此类算法至嵌入式设备比如树莓派上时,可能还需要考虑性能优化问题,例如降低分辨率或者采用更高效的特征匹配技术替代简单的颜色过滤法来进行初步筛选工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值