1

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

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

4

1 回答 1

2

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

  1. 提取图像的红色、绿色和蓝色通道(使用extractChannel)。
  2. bitwise_and在每个通道和多边形蒙版图像之间进行操作。
  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);
}

您可以使用/函数创建polyMat遮罩(取决于您的多边形)。例如:fillPolyfillConvexPoly

Mat polyMat = Mat::zeros(size, CV_8UC1);
fillConvexPoly(polyMat, polygon, Scalar(255));
于 2012-07-07T15:03:52.227 回答