在透明背景上绘制

时间:2021-02-23 15:38:04

标签: opencv

我想使用 OpenCV 在透明背景上绘制一个白色圆圈,我为此使用代码:

cv::Mat m(500, 500, CV_8UC4, cv::Scalar(0, 0, 0, 0));
cv::circle(m, cv::Point(250, 250), 100, cv::Scalar(255, 255, 255, 255), 10, cv::LINE_AA);
cv::imwrite("img.png", m);

但结果我在透明背景上有灰色轮廓的圆圈。 result image

轮廓颜色取决于透明背景的“颜色” - 如果我在上面画圆

cv::Mat m(500, 500, CV_8UC4, cv::Scalar(0, 0, 255, 0));

轮廓是红色的。

enter image description here

如何避免这种情况并绘制没有轮廓的圆?

1 个答案:

答案 0 :(得分:0)

只需使用 cv::LINE_8 而不是 cv::LINE_AA。关键是 cv::LINE_AA 在边界处产生平滑的颜色过渡,这通常会使图像更平滑,但在这种情况下,由于背景是透明的,因此看起来像一个轮廓。

或者你可以使用

cv::Mat m(500, 500, CV_8UC4, cv::Scalar(255, 255, 255, 0));

并在 cv::LINE_AA 给定的边界处保持平滑的透明度渐变,但是如果您在其上用 cv::LINE_AA 绘制其他非白色的东西,您仍然会在其周围获得白色轮廓。< /p>