我无法使用CV_AA标志使cv::line绘制抗锯齿线。以下是示例代码:
#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位浮点)图像。 (对于CV_8U,您必须将cv :: Scalar(255)而不是cv :: Scalar(1.0)传递到线函数中进行比较)
我想目前的解决方法是从CV_8U图像开始转换,但是否有一种简单的方法可以只使用CV_32F图像来完成,而不需要编写自己的抗锯齿功能?
我错过了什么吗?
OpenCV文档:cv :: line reference