openCv--裁剪影象不規則區域
得到影象中感興趣的不規則的區域分為三步,分別如下:
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);
即可得到感興趣的不規則區域。
原圖如下:
處理後的圖片: