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);
}
{
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——空间矩算子特征矩一阶矩二阶矩中心矩重心目标方向
- opencv自动光学检测、目标分割和检测(连通区域和findContours)
- 目标检测 - 基于 SSD: Single Shot MultiBox Detector 的人体上下半身检测
- 直接可以用的Python和OpenCV检测及分割图像的目标区域例子
- 目标分割和检测笔记(OpenCV实例精解)
- opencv之运动目标动作分割
- opencv学习笔记(4)----图像分割
- OpenCV学习笔记10 - 阈值分割
- 使用QT和opencv3.3进行目标检测(YOLO)
- opencv 垂直投影分割字符
- OpenCV中HOG人检测以及Part Model latent SVM目标识别
- opencv3.2 dnn 图像分割
- 《OpenCV 3计算机视觉:Python语言实现》学习笔记——目标跟踪中基本运动检测的思考
- 目标检测学习_1(用opencv自带hog实现行人检测)
- opencv 车牌定位及分割
- cs231n学习笔记-CNN-目标检测、定位、分割
- Matlab形态学图像处理:二值图像分割 标记连通区域和重心位置 删除连通区域
- 接深度学习,opencv人脸识别,目标检测等项目
- 【OpenCV学习笔记 023】两种图像分割方法比较
- Opencv3之动态目标检测:BackgroundSubtractorMOG2参数配置