# OpenCV计算物体的重心坐标（2值图像）

// 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;

{
//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;
}


|
29天前
|

OpenCV（Open Source Computer Vision Library）是一个开源的计算机视觉和机器学习库，它提供了大量的函数和工具，用于处理图像和视频数据。
OpenCV（Open Source Computer Vision Library）是一个开源的计算机视觉和机器学习库，它提供了大量的函数和工具，用于处理图像和视频数据。
20 0
|
2月前
|

【Qt&OpenCV 图像的感兴趣区域ROI】
【Qt&OpenCV 图像的感兴趣区域ROI】
47 1
|
2月前
|

【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
28 1
|
2月前
|

OpenCV中图像算术操作与逻辑操作
OpenCV中图像算术操作与逻辑操作
42 1
|
2月前
|

OpenCV图像二值化
OpenCV图像二值化
20 1
|
2月前
|

OpenCV图像翻转和旋转
OpenCV图像翻转和旋转
27 1
|
2月前
|

OpenCV鼠标操作（画红色方框截取图像）
OpenCV鼠标操作（画红色方框截取图像）
20 1
|
2月前
|

OpencV图像几何形状绘制
OpencV图像几何形状绘制
16 1
|
2月前
|

OpenCV图像像素值统计
OpenCV图像像素值统计
18 1
|
2月前
|

【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
44 0