您的位置:首页 > 运维架构

Opencv以目标重心上下分割人的上下半身

2014-11-21 17:39 197 查看
int colorclass::aoiGravityCenter(IplImage *src, CvPoint ¢er)

{
if(!src)
return -1;
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;

}

void CutPicture(char * filename, IplImage* &pDest_Upper,IplImage* &pDest_Lower)

{
IplImage *src = cvLoadImage(filename,1);
IplImage *src_g = cvLoadImage(filename,0);
//发现目标中心
CvPoint center;
int cc =  aoiGravityCenter(src_g, center);
CvScalar wr = CV_RGB(255,0,255);

//以重心点为中心,上下分割图片。
CvSize size_1= cvSize(src->width,center.y);//区域大小
cvSetImageROI(src,cvRect(0,0,size_1.width, size_1.height));//设置源图像ROI
IplImage* pDest_1 = cvCreateImage(size_1,src->depth,src->nChannels);//创建目标图像
cvCopy(src,pDest_1); //复制图像
cvResetImageROI(pDest_1);//源图像用完后,清空ROI
pDest_Upper = pDest_1;

CvSize size_2= cvSize(src->width,src->height - center.y);//区域大小
cvSetImageROI(src,cvRect(0,center.y,size_2.width, size_2.height));//设置源图像ROI
IplImage* pDest_2 = cvCreateImage(size_2,src->depth,src->nChannels);//创建目标图像
cvCopy(src,pDest_2); //复制图像
cvResetImageROI(pDest_2);//源图像用完后,清空ROI
pDest_Lower = pDest_2;

cvReleaseImage(&src);
cvReleaseImage(&src_g);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv