opencv PCA 求轮廓的形心
来源:互联网 发布:淘宝售后问题大全 编辑:程序博客网 时间:2024/05/21 03:25
PCA的详细功能不是很了解。但是,发现用它来求形心非常好。输入为findcontours之后的轮廓点,输出为形心的坐标。
话不多说,上代码。
//开发环境,opencv3.1.0+vs2013#include <iostream>#include <opencv2/opencv.hpp>using namespace std;using namespace cv;cv::Point chao_getCentroid(std::vector<cv::Point> list);//得到形心坐标,int main(){Mat src = imread("1.png");if (!src.data || src.empty()){cout << "Problem loading image!!!" << endl;return -1;}imshow("src", src);Mat gray;cvtColor(src, gray, COLOR_BGR2GRAY);Mat bw;threshold(gray, bw, 50, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);vector<Vec4i> hierarchy;vector<vector<Point> > contours;Mat bw_back = 255 - bw;findContours(bw_back, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);for (size_t i = 0; i < contours.size(); ++i){drawContours(src, contours, static_cast<int>(i), Scalar(0, 0, 255), 2, 8, hierarchy, 0);Point center = chao_getCentroid(contours[i]);circle(src,center,5,Scalar(0,0,255),-1,8);}imshow("output", src); waitKey(0);return 0;}cv::Point chao_getCentroid(std::vector<cv::Point> list){Point result_point(0,0);//Construct a buffer used by the pca analysisint sz = static_cast<int>(list.size());Mat data_pts = Mat(sz, 2, CV_64FC1);for (int i = 0; i < data_pts.rows; ++i){data_pts.at<double>(i, 0) = list[i].x;data_pts.at<double>(i, 1) = list[i].y;}//Perform PCA analysisPCA pca_analysis(data_pts, Mat(), CV_PCA_DATA_AS_ROW);//Store the center of the objectPoint cntr = Point(static_cast<int>(pca_analysis.mean.at<double>(0, 0)),static_cast<int>(pca_analysis.mean.at<double>(0, 1)));return cntr;}效果如下图所示
关于PCA详细使用,可参考官方例程,opencv3.1.0\sources\samples\cpp\tutorial_code\ml\introduction_to_pca文件夹下的introduction_to_pca.cpp文件
2 0
- opencv PCA 求轮廓的形心
- opencv学习笔记-PCA 求轮廓的形心
- 《OpenCV求轮廓的矩中心》
- opencv学习心得九----求轮廓的面积和周长
- OpenCV图像的轮廓
- opencv 的pca
- opencv 获取手势的轮廓
- opencv 获取手势的轮廓
- opencv 获取手势的轮廓
- opencv轮廓的简单应用
- opencv的轮廓高级应用
- opencv轮廓相关的函数
- OpenCV 轮廓的凸性
- opencv的contour轮廓排序
- openCV轮廓
- OPENCV轮廓
- OpenCV 轮廓
- opencv:轮廓
- PERL各个符号代表的意思
- 华为笔试题
- 如何用pdb进行python调试
- xuexi
- Dubbo 学习记录
- opencv PCA 求轮廓的形心
- Ubuntu 12.04编译mt6582错误
- log4j.properties日志配置
- onSaveInstanceState(转)
- Spring的父子容器问题和坑
- Linux文件系统以及目录结构简介
- POJ 1679 The Unique MST(次小生成树)
- ORCLE SQL截取某字符串中的最后一个之后的字符串
- 【NOIP2012模拟11.1】塔(加强)