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

如何使用opencv使用点列表剪切图像,opencv,Opencv,我有一个图像和一个由点列表(多边形)给出的选择。我的目标是获得另一个图像,其中除选择之外的所有内容都是透明的 这个问题分为两个部分: *如何从点列表创建遮罩? *使用遮罩创建新图像的最佳方法是什么?我在考虑cvCopy,但如何处理alpha通道?我遇到了一个类似的问题,我用一种奇怪(不是很快)的方式解决了它: 提取图像的红色、绿色和蓝色通道(使用extractChannel) 在每个通道和poygon掩模图像之间执行逐位\u和操作 将它们合并回来(使用merge函数) 请注意,如果只有一个通道图

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

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

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

  • 提取图像的红色、绿色和蓝色通道(使用
    extractChannel
  • 在每个通道和poygon掩模图像之间执行
    逐位\u和
    操作
  • 将它们合并回来(使用
    merge
    函数)
  • 请注意,如果只有一个通道图像,则只需按位执行

    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);
    }
    
    Mat polyMat = Mat::zeros(size, CV_8UC1);
    fillConvexPoly(polyMat, polygon, Scalar(255));