cv::line で 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::Point2i の代わりに cv::Point2d を使用してみましたが、違いは見つかりませんでした。(i == integer, d == double) ピクセル幅を 1 よりも大きくしてみましたが、まだ AA はありません。
ただし、ここにある CV_32F (32 ビット float) イメージとは対照的に、これは CV_8U (8 ビット符号なし) イメージで機能します。(CV_8U の場合、cv::Scalar(1.0) の代わりに cv::Scalar(255) を line 関数に渡して比較する必要があります)
現在の回避策は、CV_8U イメージから開始してから変換することだと思いますが、独自のアンチエイリアシング関数を記述する必要のない CV_32F イメージだけでそれを行う簡単な方法はありますか?
何か不足していますか?
OpenCV ドキュメント: cv::line リファレンス