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

関連記事

【OpenCV】画素値が取得できない??

IplImageに格納された画素値を利用してフィルター処理を行おうとしましたが、なぜか画素値が取得さ

記事を読む

【C言語/C++】余りを求める剰余演算子(%)を使う

基本的なことかもしれませんが、C言語やC++などであまりを出すには剰余演算子である『%』を使います。

記事を読む

【C言語/C++】ファイルをCSV形式でfprintfを使って保存・書き込みする

数値計算などをC言語でプログラミングするとき、その演算結果をファイルとして保存する必要性がでてくるこ

記事を読む

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

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

記事を読む

【C言語/C++】はてなの演算子の三項演算子について

C言語などのサンプルにたまに出てくるはてな(?)の演算子は 『?』と『:』の2つで1つの演算子であ

記事を読む

【DeepLearning】物体検出手法のSSD(Keras版)を試す (Ubuntu14.04)

はやりのディープラーニングの物体検出手法の一つであるSSDのサンプルを動かしてみたのでそれまでのメモ

記事を読む

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

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

記事を読む

no image

【C++】文字列のcontainsメソッドによる比較

C++/CLIなどではStringのContainsメソッドが便利ですが、純粋なC++のstring

記事を読む

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

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

記事を読む

【C言語/C++】関数ポインタと関数オブジェクトを使ってみる

関数ポインタを使う 関数ポインタはポインタの一種で文字通り関数のポインタの事で、関数を遠隔操作でき

記事を読む

【Unity】他のスクリプトを一括で取得して有効化・無効化を制御する

Unityを使っていて他のスクリプトを一時的に停止させたいと思ったので

テレビの録画をPCやNASで共有する

今までテレビはテレビ用のモニターで見ればいいやと思っていたのですが、さ

【DeepLearning】物体検出手法のSSD(Keras版)を試す (Ubuntu14.04)

はやりのディープラーニングの物体検出手法の一つであるSSDのサンプルを

【Laravel5】既存のDBからデータを取得して表示する

はじめに 今まで作ったWebサイトをLaravel5で見れるようにし

【C++/OpenCV】cv::Matの画像にインパルスノイズを付加する

OpenCVで画像にノイズを付け足したいと思って調べたところ、Pyth

Intel Corei7-7700TでHTC Viveの動作確認

はじめに HTC ViveというVRヘッドセットで遊んでみたのでその

【Python】フォルダ内のカッコ付き数字ファイルを一括でリネームするスクリプト

はじめに タイトルどおりなのですが、指定フォルダ内のファイルのファイ

→もっと見る

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