https://www.cnblogs.com/muffled/p/3344500.html

原图转化为二值图像再求质心:


#include "stdio.h"
#include "stdlib.h"
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <fstream>
using namespace cv;
using namespace std;int main(){Mat srcImage = imread("/Users/mac/Desktop/11.jpg");cvtColor(srcImage, srcImage, COLOR_BGR2GRAY);threshold(srcImage, srcImage, 180, 255, THRESH_BINARY);// namedWindow("binaryImage");vector<vector<Point>> vecAllContours;findContours(srcImage, vecAllContours, RETR_EXTERNAL, CHAIN_APPROX_NONE);Mat contourImage(srcImage.size(), CV_8UC1, Scalar(0));drawContours(contourImage, vecAllContours, -1, Scalar(255), 2);namedWindow("contourImage");vector<vector<Point>>::const_iterator itc = vecAllContours.begin();int x,y;for(; itc != vecAllContours.end(); itc++){if (itc->size() > 5){Moments mom = moments(Mat(*itc));x = mom.m10 / mom.m00;y = mom.m01 / mom.m00;cout << "x :" << x << endl;cout << "y :" << y << endl;}}Point pt = Point(x,y);circle(contourImage,pt,5,Scalar(255,0,0,0),-1);imshow("contourImage", contourImage);waitKey(0);return 0;
}

画矩形框,再再图像上显示质心坐标:

#include "stdio.h"
#include "stdlib.h"
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <fstream>
using namespace cv;
using namespace std;
Mat src;
Mat src_gray;
int thresh = 30;
int max_thresh = 255;int main()
{Mat src = imread( "/Users/mac/Desktop/11.jpg");cvtColor( src, src_gray, COLOR_BGR2GRAY );//灰度化GaussianBlur( src, src, Size(3,3), 0.1, 0, BORDER_DEFAULT );blur( src_gray, src_gray, Size(3,3) ); //滤波imshow( "image", src );//定义Canny边缘检测图像Mat canny_output;vector<vector<Point> > contours;vector<Vec4i> hierarchy;//利用canny算法检测边缘Canny( src_gray, canny_output, thresh, thresh*3, 3 );imshow( "canny", canny_output );//查找轮廓findContours( canny_output, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0) );//计算轮廓矩vector<Moments> mu(contours.size() );for( int i = 0; i < contours.size(); i++ ){mu[i] = moments( contours[i], false );}//计算轮廓的质心vector<Point2f> mc( contours.size() );for( int i = 0; i < contours.size(); i++ ){mc[i] = Point2d( mu[i].m10/mu[i].m00 , mu[i].m01/mu[i].m00 );}//画轮廓及其质心并显示Mat drawing = Mat::zeros( canny_output.size(), CV_8UC3 );for( int i = 0; i< contours.size(); i++ ){Scalar color = Scalar( 255, 0, 0);drawContours( drawing, contours, i, color, 2, 8, hierarchy, 0, Point() );circle( drawing, mc[i], 5, Scalar( 0, 0, 255), -1, 8, 0 );rectangle(drawing, boundingRect(contours.at(i)), Scalar(0,255,0));char tam[100];sprintf(tam, "(%0.0f,%0.0f)",mc[i].x,mc[i].y);putText(drawing, tam, Point(mc[i].x, mc[i].y), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(255,0,255),1);}imshow( "Contours", drawing );waitKey(0);src.release();src_gray.release();return 0;
}

opencv 求质心理论指导相关推荐

  1. OpenCV F变换理论F-transform theory

    OpenCV F变换理论 F变换理论 目标 介绍 在图像处理中的应用 从像素角度看 从模糊成分的角度 F变换理论 目标 在本教程中,将介绍模糊变换的基本概念.您将学习: 数学背景 如何将模糊性的概念应 ...

  2. 遗传算法优化BP神经网络出现输入参数不足,是什么原因啊,求大神指导,代码如下

    用遗传算法优化BP神经网络,在加粗那行出现输入参数不足,是什么原因啊,求大神指导,代码如下 function err=Bpfun(x,P,T,hiddennum,P_test,T_test) fid= ...

  3. java日历打印出的格式不对_Java打印某年某月的日历 没有错误但是运行出的月份与实际不符 求大神指导...

    Java打印某年某月的日历 没有错误但是运行出的月份与实际不符 求大神指导 我看了一下日历,发现你打出来的其实是九月份而不是八月份,那么我猜在showPrint这里的第二个参数是从0开始的,即0~11 ...

  4. matlab求解复杂隐函数,MATLAB复杂隐函数求解!求大神指导!

    问题描述: MATLAB复杂隐函数求解!求大神指导! syms D1 D2 G1 G2 al E1 E2 Km w6 G1=10^(-5);G2=10^(-5); E1=2*(10^11);E2=2* ...

  5. opencv求两张图像光流_OpenCV单应性矩阵发现参数估算方法详解

    点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 单应性矩阵计算函数与应用 OpenCV在通过特征描述子完成描述子匹配之后,会得到一些关键点对,我们会把这些关键 ...

  6. opencv求两张图像光流_光流(optical flow)和openCV中实现

    转载请注明出处! ! ! 光流(optical flow)和openCV中实现 光流的概念: 是Gibson在1950年首先提出来的. 它是空间运动物体在观察成像平面上的像素运动的瞬时速度.是利用图像 ...

  7. 计算机理论指导论文,关于计算机理论论文集锦-20210705011555.docx-原创力文档

    关于计算机理论论文集锦 多元智能理论与计算机实践教学 一.多元智能理论与教学的关系 多元智能理论是由美国哈佛大学教育研究院的心理发展学家霍华德加德纳在1983年提出.其中,主要包括语言智能.逻辑一数理 ...

  8. opencv求取图片各通道均值的两种函数方法

    mean 只求均值,输入Mat,返回Scalar,相比 meanStdDev速度更快. meanStdDev同时求取均值和方差,速度慢一点.第一个参数是Mat类图片,第二个参数是存放计算好的各通道均值 ...

  9. opencv求矩阵的逆_OpenCV 矩阵操作 加减乘除 求逆 行列式值 | 学步园

    GEMM 通用矩阵乘法 void cvGEMM( const CvArr* src1, const CvArr* src2, double alpha, const CvArr* src3, doub ...

最新文章

  1. Lock与synchronized测试区别
  2. 一种c#深拷贝方式完胜java深拷贝(实现上的对比)
  3. apache站点优化—静态缓存
  4. ASP.NET CORE MVC 2.0 如何在Filter中使用依赖注入来读取AppSettings
  5. .NET 跨平台服务端资料
  6. java 哈希算法_选择Java密码算法第1部分-哈希
  7. ffmpeg解析TS流
  8. java随机生成字母用三元运算符,【代码笔记】Java常识性基础补充(一)——赋值运算符、逻辑运算符、三元运算符、Scanner类、键盘输入、Random类、随机数...
  9. 巅峰对决 Spring Boot VS .NET 6
  10. 扎实基础深入篇(七):函数和类没那么复杂
  11. L1-044 稳赢 (15 分)—团体程序设计天梯赛
  12. 监督学习、无监督学习、半监督学习、弱监督学习、强化学习
  13. android webview 视频黑屏,webview 播放H5视频问题 黑屏 只有声音没有画面
  14. matlab 矩阵 三维矩阵相乘,将三维矩阵与二维矩阵相乘
  15. specular图使用方法_次世代贴图教程_SPECULAR、SPECULAR POWER原理教程
  16. 达梦数据库出现故障无法启动解决方法-通过归档日志修复数据库
  17. java clh_Java多线程编程CLH锁详解
  18. 世界顶级黑客,能入侵一台没有联网的电脑吗?
  19. OpenGL2与ImGui整合入门教程
  20. 立方体三维之立方体平行投影

热门文章

  1. 利用名词到代词的蒸馏以理解动词,面向任务的实例分割注意力模型
  2. 计算机浏览页面,计算机默认网页浏览器怎么设置
  3. [转载]快速记忆日语单词,一年考过1级!
  4. 一年白干!程序员赵某仿制老东家 APP,获取服务器数据,被判 4 年 6 个月
  5. 日期格式化使用 YYYY-MM-dd 的潜在问题
  6. 下列属于usb转串口的芯片是_USB转串口芯片——FT232R
  7. spring cloud灰度发布快速上下线问题解决
  8. 程序的世界里,短暂的放空
  9. 仿蚂蚁金服AntV框架蚂蚁数据可视化F2饼图(注释详尽)
  10. isco 的六种模式(cisco 系统)