コンテンツにスキップ

Top

OpenCVのcv::lineで描画で矢印を描く

矢印!

サンプルコード

cv::line() の代わりに、以下のarrow() を使うと矢印になる!

// 矢印を引くための関数
void arrow(cv::InputOutputArray image, cv::Point pt1, cv::Point pt2, cv::Scalar color, int thickness = 1, int lineType = 8, int shift = 0)
{
    float vx = (float)(pt2.x - pt1.x);
    float vy = (float)(pt2.y - pt1.y);
    float v = sqrt(vx * vx + vy * vy);
    float ux = vx / v;
    float uy = vy / v;

    //矢印
    float w = 10.0f;
    float h = 10.0f;
    cv::Point ptl, ptr;
    // 左
    ptl.x = (int)((float)pt2.x - uy * w - ux * h);
    ptl.y = (int)((float)pt2.y + ux * w - uy * h);
    // 右
    ptr.x = (int)((float)pt2.x + uy * w - ux * h);
    ptr.y = (int)((float)pt2.y - ux * w - uy * h);

    //矢印を描画
    cv::line(image, pt1, pt2, color, thickness, lineType, shift); // 中央線
    cv::line(image, pt2, ptl, color, thickness, lineType, shift); // 左
    cv::line(image, pt2, ptr, color, thickness, lineType, shift); // 右
}

以上!