从别处转载过来的,一个比较简单的方法,但比较容易产生错误,此代码为对原作者的代码的一点改进。 /*F/// 名称: GetSubImage 功能: 求输入图像的子图像 算法: 参数: image - 输入图像 roi - 子图像的定义区域,region of interests 返回: 如果成功,返回创建好的子图像 注意事项: 子图像在函数中创建,用完后需要释放内存. //F*/// IplImage* CFaceRecognitionSystemDlg::GetSubImage(IplImage *image, CvRect roi) { IplImage *result; CvRect tempRoi=roi; //判断roi是否超过了image的边界,即tempRoi.x+tempRoi.width是否大于image->width以及tempRoi.y+tempRoi.height是否大于image->height tempRoi.width=(tempRoi.x+tempRoi.width)>image->width?(image->width-tempRoi.x):tempRoi.width; tempRoi.height=(tempRoi.y+tempRoi.height)>image->height?(image->height-tempRoi.y):tempRoi.height; // 设置 ROI cvSetImageROI(image,tempRoi); // 创建子图像 result = cvCreateImage( cvSize(tempRoi.width, tempRoi.height), image->depth, image->nChannels );//如果roi大小大于image的大小则容易出错,可用result = cvCreateImage( cvGetSize(image), image->depth, image->nChannels )代替 cvCopy(image,result); cvResetImageROI(image); return result; }