我有一个图像和一个由点列表(多边形)给出的选择。我的目标是获得另一个图像,其中除了选择之外的所有内容都是透明的。
这个问题有两个部分: * 如何从点列表中创建掩码?* 使用蒙版创建新图像的最佳方式是什么?我在考虑 cvCopy 但如何处理 alpha 通道?
我有一个图像和一个由点列表(多边形)给出的选择。我的目标是获得另一个图像,其中除了选择之外的所有内容都是透明的。
这个问题有两个部分: * 如何从点列表中创建掩码?* 使用蒙版创建新图像的最佳方式是什么?我在考虑 cvCopy 但如何处理 alpha 通道?
我有一个类似的问题,我以一种奇怪(不是很快)的方式解决了它:
extractChannel
)。bitwise_and
在每个通道和多边形蒙版图像之间进行操作。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
遮罩(取决于您的多边形)。例如:fillPoly
fillConvexPoly
Mat polyMat = Mat::zeros(size, CV_8UC1);
fillConvexPoly(polyMat, polygon, Scalar(255));