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
スポンサーリンク
Amazon
  • このエントリーをはてなブックマークに追加

関連記事

【C言語/C++】コンソールでAAアニメーション

コンソール上でAA(アスキーアート)のアニメーションをさせます。 手順としては

記事を読む

【C言語/C++】関数の宣言・定義まとめ

1 関数プロトタイプ宣言・定義 1-1 プロトタイプ宣言 1-2 定義 2 ファイ

記事を読む

【C++】多次元ベクトルクラスを作る

3次元ベクトルクラスや2次元ベクトルクラスを作るときは内部のデータとして静的な配列を使えば問題ありま

記事を読む

【C++】行列演算ライブラリEigen

デフォルトのCやC++には行列やベクトルなどの演算ライブラリはありません。なので行列計算などをしよう

記事を読む

【C言語】文字列に指定の文字列が含まれるか調べる

ある文字列に指定の文字列が含まれるかどうかを調べるにはstring.hにあるstrstr関数を使いま

記事を読む

【C++/CLI】フォームアプリケーションでコンソール画面を出現させる

プロジェクトのプロパティを開いて「構成プロパティ」→「リンカ」→「システム」の「サブシステム」を「コ

記事を読む

【C++】vectorの解放

C++STLにあるvectorは配列の要素数がわからない場合などに非常に便利ですがメモリ関係で面倒だ

記事を読む

【C++】ファイルの読み込みまとめ

C++におけるファイル読み込みのまとめ ファイルの開き方 値の取得方法 >>演算子

記事を読む

【C言語/C++】int整数などの数値をchar配列の文字列に変換する

C++であればstringが使えて非常に便利ですが、C言語で文字列というと基本的にはcharの配列を

記事を読む

チェスボード画像自動生成ツール

1マスのサイズ(ピクセル) マスの数× 左上が白 枠をつけるか 枠の色白黒

記事を読む

UWSCを使ったソフト自動立ち上げ【SoftEther VPN Server】

やりたいこと 最近SoftEtherという筑波大学発のベンチャー企業

【PHP】headerでContent-Typeを指定したのに効かない場合の対処法

PHPでサイトマップを作ろうと思い、XML形式のファイルを出力しようと

スマホ向け幅固定サイトの回転時の幅対応方法

幅固定サイトでのスマホ回転時Webサイトの横幅を合わせる方法のメモ。

【PHP】特定のURLからそのAtomやRSSのフィードを抽出する方法

特定のURLからRSSやATOMのフィードを抽出する方法をメモ。 流

フィード抽出ツール(RSS1.0、RSS2.0、atom)

任意URL サイト名 サイトURL RSS1.0

格安プラン限定レンタルサーバー機能比較表(2016年)

はじめに  最近新しい共用サーバーをレンタルしようと思い調査およびそ

kindle unlimitedが便利だったのでお勧めの使い方など感想メモ

 kindle unlimitedというサービスが8/3からAmazo

→もっと見る

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