一.ROI介绍

在OpenCV中我们能够非常方便地获取指定ROI区域的子图像。如果你对图像设置了ROI,那么,Opencv的大多数函数只在该ROI区域内运算(只处理该ROI区域),如果没设ROI的话,就会出来整幅图像。
ROI非常有用,例如我们想把图像中的人脸扣出来,进行人脸识别。需要注意的时候,ROI一定在图像内部,而不能超出图像的范围。

对图像设定ROI的函数是:

cvSetImageROI(IplImage* src,CvRect rect);
src表示的是源图像,rect只的是ROI区域。

如果要取消ROI区域,那么使用函数:

cvResetImageROI(IplImage* src);
这个函数,就把src上的ROI区域取消掉。

图像的剪切有多种措施,其中利用ROI的措施

第一步:将必需剪切的图像图像不局部设置为ROI

cvSetImageROI(src , cvRect(x,y,width,height));

第二步:修建一个与必需剪切的图像局部同样大小的新图像

cvCreateImage(cvSize(width,height),IPL_DEPTH,nchannels);

第三步:将源图像复制到修建的图像中

cvCopy(src,dst,0);

第四步:释放ROI区域

cvResetIamgeROI(src);

缩放可用cvResize();



二.图像分割

[cpp] 
​​ view plain​​
​​ copy​​




1. // Cut_image.cpp : 定义控制台应用程序的入口点。
2. //
3. /***********************************************************************
4. * OpenCV 2.4.4 测试例程
5. * 杜健健 提供
6. ***********************************************************************/
7. #include "stdafx.h"
8. #include <opencv2/opencv.hpp>
9.
10. #include <opencv2/imgproc/imgproc.hpp>
11. #include <opencv2/highgui/highgui.hpp>
12. #include <iostream>
13. #include <vector>
14. using namespace
15. using namespace
16.
17.
18. //剪切图片为m * n 块
19. void Cut_img(Mat src_img,int m,int
20.
21. int
22. int
23. int
24.
25. int
26. int
27.
28. Mat roi_img,tmp_img;
29.
30. Point p1,p2;
31. for(int
32. for(int
33. //p1 =
34. Rect rect(i+j*ceil_width,j+i*ceil_height,ceil_width,ceil_height);
35.
36. src_img(rect).copyTo(roi_img);
37.
38. ceil_img.push_back(roi_img);
39. "roi_img",roi_img);
40. //getchar();
41. waitKey(0);
42. //rectangle(i+j*ceil_width,j+i*ceil_height,);
43. }
44. }
45.
46. void show_images(Vector<Mat> imgs,int
47.
48. //do something
49. }
50.
51. int _tmain(int
52. {
53. "D://input//lena.jpg",1);
54. "src img",img);
55. int
56. int
57. Vector<Mat> ceil_img = m*n;
58.
59. Cut_img(img,m,n,ceil_img);
60.
61. waitKey();
62. return
63. }





三.示例结构

原图:

图像切割,使用ROI_OpenCV

切割后的图:

图像切割,使用ROI_ios_02

图像切割,使用ROI_OpenCV_03

图像切割,使用ROI_OpenCV_04

图像切割,使用ROI_ios_05

图像切割,使用ROI_#include_06

图像切割,使用ROI_#include_07

图像切割,使用ROI_ios_08

图像切割,使用ROI_ios_09

图像切割,使用ROI_ios_10

四.总结

根据切割的块数,计算小图片尺寸大小,存放到vector容器里,要的时候再读取出来就可以了。没用到opencv的ROI,但也可以使用。