gpt4 book ai didi

opencv - 在带有 CV_AA 标志的 OpenCV 中画一条线不会产生抗锯齿线

转载 作者:太空宇宙 更新时间:2023-11-03 20:41:24 24 4
gpt4 key购买 nike

我无法让 cv::line 绘制一 strip 有 CV_AA 标志集的抗锯齿线。下面是示例代码来说明:

#include<iostream>
#include<opencv2/opencv.hpp>

using namespace std;

int main(int argc, char* argv[])
{
cv::Mat base(100, 100, CV_32F);

cv::Point2i p1(20, 20);
cv::Point2i p2(70, 90);

cv::line(base, p1, p2, cv::Scalar(1.0), 1, CV_AA); // 1 pixel thick, CV_AA == Anti-aliased flag

cv::namedWindow("line test", CV_NORMAL);
cv::imshow("line test", base);
cv::waitKey(0);

return 0;
}

我尝试使用 cv::Point2d 而不是 cv::Point2i 并没有发现任何区别。 (i == integer, d == double) 我也试过让像素宽度大于1,还是没有AA。

但是,这确实适用于 CV_8U(8 位无符号)图像,而不是我这里的 CV_32F(32 位 float )图像。 (对于CV_8U,必须将cv::Scalar(255)而不是cv::Scalar(1.0)传入line函数进行比较)

我想当前的解决方法是从 CV_8U 图像开始然后转换,但是是否有一种直接的方法可以只使用 CV_32F 图像而不需要我编写自己的抗锯齿功能?

我错过了什么吗?

OpenCV 文档:cv::line reference

最佳答案

./core/src/drawing.cpp:1569
void line( Mat& img, Point pt1, Point pt2, const Scalar& color,
int thickness, int line_type, int shift )
{
if( line_type == CV_AA && img.depth() != CV_8U )
line_type = 8;
//omitted
}

源码上说只要深度不是CV_8U,就会用8-connected方法绘制。

关于opencv - 在带有 CV_AA 标志的 OpenCV 中画一条线不会产生抗锯齿线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11055837/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com