计算图像区域的重心(区域像素值的均值)
尘风断弦 2013-05-02 10:44:07 #include "iostream"
#include "cv.h"
#include "highgui.h"
#include "math.h"
const char* filename = "F:\\img_48.jpg";
void mouseHandler(int event, int x, int y, int flags, void* param)
{
int N=0;
int i,j;
IplImage* img,* img0, * img1;
CvScalar s = cvGet2D(img,i,j);
img0 = (IplImage*) param;
img1 = cvCloneImage(img0);
CvFont font;
uchar* ptr;
char label[50];
cvInitFont(&font, CV_FONT_HERSHEY_PLAIN, .8, .8, 0, 1, 8);
if (event == CV_EVENT_LBUTTONDOWN)
{
ptr = cvPtr2D(img1, y, x, NULL); //返回指向特殊数组元素的指针 && cvGet2D返回指向特殊数组的元素
sprintf(label, "(%d, %d, %d)" ,ptr[0], ptr[1], ptr[2]);
for (i=0;i<img->height;i++)
{
for (j=0;j<img->width;j++)
{
if (s.val[0] >= ptr[2] && s.val[1] >= ptr[1] && s.val[2] >= ptr[0])
{
s.val[0]+=s.val[0];
s.val[1]+=s.val[1];
s.val[2]+=s.val[2];
N++;
}
}
}
cvRectangle(
img1,
cvPoint(x, y-12 ),
cvPoint(x + 200, y + 20),
CV_RGB(255, 255, 0),
CV_FILLED,
8, 0
); //通过对角线上的两个顶点绘制简单、指定粗细或者带填充的矩形
cvPutText(
img1,
label,
cvPoint(x, y),
&font,
CV_RGB(255, 0, 0)
); //给定的字体和颜色在图像上显示文本字符串,img1:输入图像;label:要显示的字符串
//cvPoint(x, y):第一个字母左下角的坐标;font:指向字体结构的指针;CV_RGB:文本的颜色.
cvShowImage("img", img1);
}
}
int main(int argc, char** argv)
{
IplImage* img;
img = cvLoadImage(filename, 1);
assert(img);
cvNamedWindow("img",1);
cvSetMouseCallback("img", mouseHandler, (void*)img);
cvShowImage("img", img);
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&img);
return 0;
}
想要遍历整张图来比较一个点的像素值,并且进行计算均值,求出区域的重心点,求帮忙改改问题!