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

标签 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

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

最佳答案

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

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

关于c++ - 为什么使用 cv::line 函数绘制的不同线条具有不同的透明度 (alpha) 级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31096950/

相关文章:

c - 将 OpenCV 坐标传递给 OpenGL

c++ - OpenCV2,c++ - cv::CV_8UC4 预期为不合格 ID

c++ - 图像处理术语 : Bit Depth

python - 如何从 'ravi' 文件中获取数据?

c++ - Photoshop如何将两张图片融合在一起?

android - 在 C++ 中实现共享内存管理器

c++ - 使用 Lua 在 C++ 中创建定时器

c++ - 共享库中的 QMessageBox 抛出错误

c++ - 装饰方法时减少样板

c++ - 找到每个像素opencv的光流