OpenCVで矢印を描画する

公開日: : 最終更新日:2014/08/14 C/C++, OpenCV

スポンサーリンク

OpenCVで矢印を描画するという関数が無いみたいだったので作りました。書いていることは参考リンク先のをOpenCV用に直しただけなので、正直リンク先見た方が参考になります。

void cvArrow(CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness=1, int lineType=8, int shift=0)
{
	cvLine(img,pt1,pt2,color,thickness,lineType,shift);
	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=5,h=10;
	CvPoint 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);
	//矢印の先端を描画する
	cvLine(img,pt2,ptl,color,thickness,lineType,shift);
	cvLine(img,pt2,ptr,color,thickness,lineType,shift);
}
int main(void)
{
	IplImage *img = cvCreateImage(cvSize(100,100),IPL_DEPTH_8U,3);
	//白く初期化する
	for(int i=0;i<100*100*3;i++){
		img->imageData[i] = 255;
	}
	//青い矢印を描画
	cvArrow(img,cvPoint(10,10),cvPoint(90,90),cvScalar(255,0,0));
	cvNamedWindow("arrow",CV_WINDOW_AUTOSIZE);
	cvShowImage("arrow",img);
	cvWaitKey(0);
	cvReleaseImage(&img);
	cvDestroyWindow("arrow");
	return 0;
}

cvArrowという関数が矢印を描画する関数で、cvLineと引数を同じにしましたが、矢印の幅を引数にしてみるのもいいかもしれません。

『矢印をプログラムで描く;単純ベクトル加算法』
http://k-hiura.cocolog-nifty.com/blog/2010/11/post-2a62.html
スポンサーリンク
  • このエントリーをはてなブックマークに追加

関連記事

WordPressサイトのSSL対応(HTTPS化)手順のまとめ【さくらサーバー】

先週頃にこのサイトをSSL対応しましたのでその流れについてまとめておき

【Google Charts】動的にグラフを更新する方法

はじめに Webサイト上でグラフを描こうと思った場合、いくつかのJa

体重変化量計算シミュレータ【ダイエット/肥満】

ツール本体 入力 カロリー入力 1日の余剰摂取/消費カロリー

おサイフケータイ対応ストレージ32GBのSIMフリースマホまとめ【2017年秋版】

はじめに SIMフリーの格安スマホのおサイフケータイ機能付きのもので

リクルート期間限定ポイントの有効な使い道

はじめに  先日クレジットカードの見直し活動の一環でポイント還元率の

初心者がお金を貯めるための節約・財テク手法まとめ【ポイント還元・投資・税金対策】

はじめに  最近なるべく節約しようと思い、お金周りに関して色々調べて

動画講座を効率的にキャプチャして復習する方法

はじめに  最近、動画媒体の講座などをたまに視聴しています。独学だと

→もっと見る

  • Author : ががんぼ
    プログラミングやWeb関係で気付いたことについてメモしていく予定。だいたいが備忘録ですが、自分でサンプルを作って動かしてみたりしています。
PAGE TOP ↑