转自http://blog.csdn.net/destiny_1027/article/details/7532789
要得到不规则区域的像素,可以用mask(讨论太多了),可是mask怎么制作呢?
首先不规则区域只要是封闭的都可以看做多边形。利用鼠标响应函数可以得到不规则区域边的顶点,也就是顶点坐标,区域由这些点顺序连接组成。
然后利用opencv的cvPolyLine绘制区域,再利用cvFillPoly填充多边形为白色,完成mask制作。
1、cvPolyLine 绘制简单或多样的多边形。
void cvPolyLine( CvArr* img, CvPoint** pts, int* npts, int contours, int is_closed,
img
pts
npts
contours
is_closed
color
thickness
line_type
shift
2、cvFillPoly用于一个单独被多边形轮廓所限定的区域内进行填充。函数可以填充复杂的区域,例如,有漏洞的区域和有交叉点的区域等等。
void cvFillPoly( CvArr* img, CvPoint** pts, int* npts, int contours,CvScalar color, int line_type=8, int shift=0 );
img
pts
npts
contours
color
line_type
shift
将得到的mask与源图像作cvAnd得到要的ROI区域。