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

时间:2015-06-28 06:49:27

标签: c++ opencv image-processing transparency alpha

我使用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);
}

我想画出纯绿色的线条而没有任何透明度。但是在结果图像中,我注意到边缘的一些线是透明的。 (或线条边框模糊)以下是我拍摄图像的一部分。

enter image description here

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

1 个答案:

答案 0 :(得分:4)

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

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