2012-07-07 30 views
1

我有一张图片和一列点(聚合物)给出的选择。我的目标是获得另一个图像,除了选择之外的所有内容都是透明的。如何使用opencv使用点列表来剪切图片

这个问题有两个部分: *如何从点列表中创建掩码? *使用遮罩创建新图像的最佳方式是什么?我正在考虑cvCopy,但我如何处理alpha通道?

回答

2

我有一个呈三角问题,我解决它在一个陌生的(不是非常快)的方式:(使用extractChannel)图像的

  1. 提取的红色,绿色和蓝色通道。
  2. 做一个bitwise_and操作之间的每个渠道和poygon蒙版图像。
  3. 将它们合并回来(使用merge函数)。

请注意,如果您的单通道图像比您只需要做一个bitwise_and

C++代码

void createPOI(const Mat& src, const Mat& polyMat, Mat& dst) 
{ 
    vector<Mat> array(3); 

    for (int i=0; i<3; i++) 
    { 
     extractChannel(src, array[i], i); 
     bitwise_and(array[i], polyMat, array[i]); 
    } 

    merge(array, dst); 
} 

您可以使用/fillConvexPoly功能polyMat面膜(取决于你的多边形)。例如:

Mat polyMat = Mat::zeros(size, CV_8UC1); 
fillConvexPoly(polyMat, polygon, Scalar(255));