使蒙版外全部透明
Make all transparent outside the mask
我有 jpg 图像和多边形,我想以这种方式用作蒙版:应显示多边形内的图像,多边形外的所有图像应为 100% 透明。现在我只实现了第一个目标——我可以在多边形内显示图像,但它外面都是黑色的:
cv::Mat image;
//load image
image.convertTo(image, CV_8UC3, 255.0);
std::vector<cv::Point> contour;
//load polygon
const cv::Point* elementPoints[1] = { &contour[0] };
int numberOfPoints = (int)contour.size();
cv::Mat mask = cv::Mat::zeros(image.size(), image.type());
cv::fillPoly(mask, elementPoints, &numberOfPoints, 1, cv::Scalar( 255, 255, 255), 8);
cv::Mat dstImage = cv::Mat::zeros(image.size(), image.type());
cv::bitwise_and(image, mask, dstImage);
imwrite("test.jpg", dstImage);
我知道我需要使用 alpha 通道,但不清楚我下一步需要做什么以及如何实现它。
如何在遮罩外获得透明背景?
首先,按照 this 答案中的描述创建具有四个通道的图像。对第四个通道使用负源以使其已经归零。你现在有一个完全透明的图像。
像以前一样创建蒙版,只是使用不同的 RGBA 值(请注意 Scalar
有第四个构造函数参数用于 alpha 值):
cv::fillPoly(mask, elementPoints, &numberOfPoints, 1, cv::Scalar(0, 0, 0, 255), 8);
最后,应用蒙版将相关区域设置为完全不透明:
cv::bitwise_or(image, mask, dstImage);
您可能希望保留原始图像的 RGB 值(以便稍后进行操作)或者清除它们(这将导致更高的压缩率,从而减小文件大小)。如果是后者,请使用 RGBA 设置为 0, 0, 0, 0 的倒置掩码并将其应用 bitwise_and
...
我有 jpg 图像和多边形,我想以这种方式用作蒙版:应显示多边形内的图像,多边形外的所有图像应为 100% 透明。现在我只实现了第一个目标——我可以在多边形内显示图像,但它外面都是黑色的:
cv::Mat image;
//load image
image.convertTo(image, CV_8UC3, 255.0);
std::vector<cv::Point> contour;
//load polygon
const cv::Point* elementPoints[1] = { &contour[0] };
int numberOfPoints = (int)contour.size();
cv::Mat mask = cv::Mat::zeros(image.size(), image.type());
cv::fillPoly(mask, elementPoints, &numberOfPoints, 1, cv::Scalar( 255, 255, 255), 8);
cv::Mat dstImage = cv::Mat::zeros(image.size(), image.type());
cv::bitwise_and(image, mask, dstImage);
imwrite("test.jpg", dstImage);
我知道我需要使用 alpha 通道,但不清楚我下一步需要做什么以及如何实现它。
如何在遮罩外获得透明背景?
首先,按照 this 答案中的描述创建具有四个通道的图像。对第四个通道使用负源以使其已经归零。你现在有一个完全透明的图像。
像以前一样创建蒙版,只是使用不同的 RGBA 值(请注意 Scalar
有第四个构造函数参数用于 alpha 值):
cv::fillPoly(mask, elementPoints, &numberOfPoints, 1, cv::Scalar(0, 0, 0, 255), 8);
最后,应用蒙版将相关区域设置为完全不透明:
cv::bitwise_or(image, mask, dstImage);
您可能希望保留原始图像的 RGB 值(以便稍后进行操作)或者清除它们(这将导致更高的压缩率,从而减小文件大小)。如果是后者,请使用 RGBA 设置为 0, 0, 0, 0 的倒置掩码并将其应用 bitwise_and
...