OpenCVで点線を描画する
はじめに
OpenCVには点線を描画する関数がありません。 すごしググると以下のようにcv::LineIteratorを使う方法がヒットしますが、これでは太さの指定ができません。
https://answers.opencv.org/question/180090/how-to-draw-a-dotted-line-c/
そこで、単純に点線を引く自作関数を作りました。 また、cv::lineと引数を統一したので、関数名を変更するだけで使用できます。
点線を描画する関数
- dot_span_pxはドット幅をピクセル値で指定します。好きな値を指定して下さい。
void dottedLine(cv::Mat& origin, const cv::Point p1, const cv::Point p2, const cv::Scalar line_color, const int thickness, const int lineType) { // 点線の幅 const double dot_span_px = 20; const double theta = std::atan2((p2 - p1).y, (p2 - p1).x); const int iter_x = std::abs((p2 - p1).x) / dot_span_px; const int iter_y = std::abs((p2 - p1).y) / dot_span_px; const cv::Point span(dot_span_px * std::cos(theta), dot_span_px * std::sin(theta)); for (int i = 0; i < std::max(iter_x, iter_y); i += 2) { cv::line(origin, p1 + span * i, p1 + span * (i + 1), line_color, thickness, lineType); }