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); // 右
}
以上!