OpenCV计算重心坐标
来源:互联网 发布:龙华民治数据 编辑:程序博客网 时间:2024/06/11 01:20
原文地址:http://blog.csdn.net/wangyaninglm/article/details/49618769
效果图:
代码:
- // FindGravity.cpp : 定义控制台应用程序的入口点。
- //
- #include "stdafx.h"
- #include <iostream>
- #include <string>
- #include "cv.h"
- #include "highgui.h"
- #include <opencv2/core/core.hpp>
- #include <opencv2/highgui/highgui.hpp>
- #pragma comment(lib,"opencv_core2410d.lib")
- #pragma comment(lib,"opencv_highgui2410d.lib")
- #pragma comment(lib,"opencv_imgproc2410d.lib")
- using namespace std;
- using namespace cv;
- void FindGravity()
- {
- }
- /** 计算二值图像的重心
- * @param[in] src 输入的待处理图像
- * @param[out] center 重心坐标
- * @retval 0 操作成功
- * @retval -1 操作失败
- * @note 输入图像是二值化图像
- * @note xc=M10/M00, yc=M01/M00, 其中 Mx_order,y_order=SUMx,y(I(x,y)*x^x_order*y^y_order)
- */
- static int aoiGravityCenter(IplImage *src, CvPoint ¢er)
- {
- //if(!src)
- // return GRAVITYCENTER__SRC_IS_NULL;
- double m00, m10, m01;
- CvMoments moment;
- cvMoments( src, &moment, 1);
- m00 = cvGetSpatialMoment( &moment, 0, 0 );
- if( m00 == 0)
- return 1;
- m10 = cvGetSpatialMoment( &moment, 1, 0 );
- m01 = cvGetSpatialMoment( &moment, 0, 1 );
- center.x = (int) (m10/m00);
- center.y = (int) (m01/m00);
- return 0;
- }
- IplImage* binary_image(IplImage* src)
- {
- // cvThreshold( src, src, 100, 255, CV_THRESH_BINARY );//100 is the thredhold
- IplImage* one_channel = cvCreateImage(cvSize(src->width,src->height),IPL_DEPTH_8U,0);
- for(int y = 0;y < src->height;y++)
- {
- char *ptr= src->imageData + y * src->widthStep;
- char *p_one_channel = one_channel->imageData + y * one_channel->widthStep;
- for(int x = 0;x < src->width;x++)
- {
- int temp = ptr[3*x];
- if (temp != 0)//不是黑色也就是说不是背景
- {
- p_one_channel[x] = 255;//设置为白色
- }
- else
- {
- p_one_channel[x] = 0;
- }
- //ptr[3*x]=
- //ptr[3*x+1]=
- //ptr[3*x+2]=;
- }
- }
- return one_channel;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- string str_name = "seg_right.bmp";
- IplImage* src;
- IplImage* draw = cvLoadImage(str_name.c_str(),1);//绘制重心的图像
- if ((src = cvLoadImage(str_name.c_str(),1))!=0)
- {
- //src = binary_image(src);
- cvNamedWindow( "binary image", 1 );
- cvShowImage( "binary image", binary_image(src) );
- }
- CvPoint xy;
- aoiGravityCenter(binary_image(src),xy);
- cout<<xy.x<<endl;
- cout<<xy.y<<endl;
- cvCircle(draw,cvPoint(xy.x,xy.y),3,CV_RGB(0,0,255),5);
- cvNamedWindow( "重心", 1 );
- cvShowImage( "重心", draw );
- cvWaitKey(0);
- return 0;
- }
我调试好的工程:点击打开链接
http://download.csdn.net/detail/wangyaninglm/9389338
0 0
- OpenCV计算重心坐标
- OpenCV计算物体的重心坐标(2值图像)
- 计算二值图像的重心坐标并绘制重心
- 计算不规则图形的重心,OpenCV
- 重心坐标
- opencv 识别网球 ,或者绿色的小球 输出重心坐标
- Barycentric Coordinates of Tetrahedron (计算四面体的重心坐标)
- OpenCV中计算二值图像的重心
- 【opencv】双目视觉下空间坐标计算
- OpenCV:获取图像重心
- 空间三角形重心坐标计算方法
- 【OpenCV】仿射变换:坐标计算 旋转 缩放
- 在unity向量空间内绘制几何(3):通过三角形重心坐标计算任意形状网格上的随机坐标点
- OpenCV--使用CvMoments求取重心
- 利用opencv求图像重心
- opencv图像灰度重心算法
- opencv 识别门的重心
- opencv图像灰度重心算法
- 如何修改linux主机名
- JAVA中堆和栈的区别
- 关于华为手机使用高德地图无法定位的问题
- POJ 3233 Matrix Power Series
- jQuery操作select-----1
- OpenCV计算重心坐标
- hdu3555(数位dp)
- IOS根据文字计算laber的行数与长度
- . ERROR! The server quit without updating PID file
- Thumbnailator java图片压缩,加水印,批量生成缩略图
- 危害9亿安卓设备高通漏洞细节曝光(CVE-2016-3842,含POC)
- 记载我学习go的过程(一)
- 写项目的常用配置
- poj1083-Moving Tables-贪心