为什么使用 cv::line 函数绘制的不同线条具有不同的透明度 (alpha) 级别?

Why different lines drawn using cv::line function has different transparency (alpha) levels?

我使用 houghLines 变换来检测图像中的线条,并使用 cv::line() 函数在单独的 Mat 图像上绘制由它检测到的线条。 请注意,houghLinesP 检测到的线条通常相互重叠并且数量很多。 (即使图像中有 1 条线,它也会检测相邻线的数量)

for (size_t i = 0; i < lines.size(); i++)
{
    Vec4i l = lines[i];
    line(src, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0, 255, 0), 10, CV_AA);
}

我想用没有任何透明度的纯绿色绘制线条。但在生成的图像中,我注意到边缘的一些线条是透明的。 (或者线条的边界模糊)以下是我生成的图像的一部分。

我想避免这种情况。我想要线条有锋利的边缘,不应该有任何透明度。怎么做?

CV_AA 标志告诉 cv::line() 绘制一条 Anti-A 连线。这是您的透明线边框像素的来源。
如果删除 CV_AA 标志,线条将被绘制成锯齿状,但没有透明胶片 (Bresenham)。

仔细观察图像,在彩色区域(零星的暗点)内有可见的 JPG 伪影。这些伪影不存在于内存中的图像中,但会出现在 JPG 保存的文件中。尝试将图像另存为 PNG。