openCv--裁剪图像不规则区域

来源:互联网 发布:矢量图标js下载 编辑:程序博客网 时间:2024/05/29 16:31

得到图像中感兴趣的不规则的区域分为三步,分别如下:

1.在原图上用cvLine画出自己感兴趣的区域,比如这个区域可以有几个线段围起来,就用cvLine将所有的线段连起来

cvLine( CvArr* img, CvPoint pt1, CvPoint pt2,   CvScalar color, int thickness CV_DEFAULT(1),  int line_type CV_DEFAULT(8), int shift CV_DEFAULT(0) );

例子:

IplImage ipl_img;cvLine(&ipl_img, cvPoint(2 * vertics(i, 0), 2 * vertics(i, 1)), cvPoint(2 * vertics(i + 1, 0), 2 * vertics(i + 1, 1)), CV_RGB(111, 12, 200), 2, 8, 1);


2.创建一张和原图同样大小的全黑图像,画上跟第一步同样的线,再把区域内全置为白色。

在纯黑图像上划线:

Mat image0 = imread("D:/imagewarping/imageset/10.jpg", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);IplImage *face = cvLoadImage("D:/imagewarping/imageset/10_.jpg");Mat M_mask = image0.clone();IplImage mask_img = M_mask;cvZero(&mask_img);cvLine(&mask_img, cvPoint(vertics(i, 0),vertics(i, 1)), cvPoint(vertics(i + 1, 0), vertics(i + 1, 1)), CV_RGB(255, 255, 255), 2, 8, 1);


把区域内置成白色,其中cvPoint是区域内的点即可,CV_RGB是白色即可:

cvFloodFill(&mask_img,cvPoint(75,75),CV_RGB(255, 255, 255),cvScalar(20, 30, 40, 0),cvScalar(20, 30, 40, 0),NULL,4,NULL);


3.前两步的结果做与运算

cvAnd(&ipl_img,&mask_img,&ipl_img);
即可得到感兴趣的不规则区域。

原图如下:

处理后的图片:



0 0
原创粉丝点击