opencv3计算图像轮廓的中心矩
2015-10-19 23:02
501 查看
#include<iostream> #include<opencv2/opencv.hpp> #include<vector> using namespace cv; using namespace std; int main() { Mat srcImage = imread("group.jpg"); imshow("【原图】", srcImage); //首先对图像进行空间的转换 Mat grayImage; cvtColor(srcImage, grayImage, CV_BGR2GRAY); //对灰度图进行滤波 GaussianBlur(grayImage, grayImage, Size(3, 3), 0, 0); imshow("【滤波后的图像】", grayImage); //为了得到二值图像,对灰度图进行边缘检测 Mat cannyImage; Canny(grayImage, cannyImage, 128, 255, 3); //在得到的二值图像中寻找轮廓 vector<vector<Point>> contours; vector<Vec4i> hierarchy; findContours(cannyImage, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0)); //绘制轮廓 for (int i = 0; i < (int)contours.size(); i++) { drawContours(cannyImage, contours, i, Scalar(255), 1, 8); } //计算轮廓的矩 vector<Moments> g_vMoments(contours.size()); for (int i = 0; i < (int)contours.size(); i++) { g_vMoments[i] = moments(contours[i], true); } //输出所有轮廓的矩 for (int i = 0; i < (int)contours.size(); i++) { cout << "【用矩计算出来的第" << i << "个轮廓的面积为:】" << g_vMoments[i].m00 << endl; } /**************************************************中心矩计算公式**************************************************/ //利用计算得到的 矩 计算中心矩 vector<Point2f> centerMoments(contours.size()); for (int i = 0; i < (int)contours.size(); i++) { centerMoments[i] = Point2f(float(g_vMoments[i].m10 / g_vMoments[i].m00), float(g_vMoments[i].m01 / g_vMoments[i].m00)); } //将得到的中心矩显示出来 for (int i = 0; i < (int)contours.size(); i++) { //参数中的 -1 表示填充 circle(cannyImage, (Point)centerMoments[i], 5, Scalar(255), -1, 8); } imshow("【处理后的图像】", cannyImage); waitKey(0); return 0; }
相关文章推荐
- Linux less 命令 【转载】
- opencv3计算轮廓的长度-arcLength函数
- opencv3计算轮廓的面积-contourArea函数
- Linux下的socket编程实践(七) I/O多路复用技术之select模型
- Linux命令行在su root后突然变成bash-4.1$的办法
- GIC ITS 学习笔记(一)
- opencv3返回外部矩形边界在图像中的应用-滚动条
- opencv3返回外部矩形边界-boundingRect函数
- opencv3阀值化下的轮廓查找与绘制
- opencv3逼近多边形曲线-在图像中的应用-滚动条
- Linux监控软件之 Nagios
- linux初学
- opencv3中Canny算子下的轮廓检测与绘制
- awk实战:文件里面全是数字,实现大于100的求和并打印出所在行和这些数字的总和
- eclipse中没有MinGW GCC/Cross GCC/Cygwin GCC/linux GCC/MacOSX GCC/MinGW GCC/Solaris GCC(编译器)
- PXE+KICKSTART进行自动化安装linux
- linux 常用配置记录
- Linux文件权限详解
- Linux下如何为刚安装好的Eclipse在桌面建一个启动图标?
- Linux操作系统中,*.zip、*.tar、*.tar.gz、*.tar.bz2、*.tar.xz、*.jar、*.7z等格式的压缩与解压