如何使用opencv使用点列表剪切图像

时间:2012-07-07 14:47:15

标签: opencv

我有一个图像,以及一个点列表(一个多边形)给出的选择。我的目标是获得另一个图像,其中除选择之外的所有内容都是透明的。

这个问题分为两部分:  *如何从点列表中创建蒙版?  *使用蒙版创建新图像的最佳方法是什么?我在考虑使用cvCopy但是如何处理alpha通道?

1 个答案:

答案 0 :(得分:2)

我有一个类似的问题,我以一种奇怪的(不是很快)的方式解决了它:

  1. 提取图像的红色,绿色和蓝色通道(使用extractChannel)。
  2. 在每个频道和poygon掩码图像之间执行bitwise_and操作。
  3. 将它们合并(使用merge函数)。
  4. 请注意,如果您有单通道图片,则需要执行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);
    }
    

    您可以使用polyMat / fillPoly函数创建fillConvexPoly蒙版(取决于您的多边形)。例如:

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