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言語】文字列に指定の文字列が含まれるか調べる

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

記事を読む

【C言語】fopenが失敗するエラー

ファイル操作に使うfopenがどうしても失敗してしまい困っていました。既に開かれているファイルを開く

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

【C言語】fscanfでファイルを1行ずつ読み込む

C言語のfscanfでCSV形式(単純なカンマ区切り)のファイルを読み込むサンプル。 基本的なこと

記事を読む

NVIDIA DIGITSをSupervisorを使って自動起動する

はじめに 先日Ubuntu14.04にDIGITS 5をGPUなしP

【2017年度】GeForce 1080 Ti搭載BTOパソコン比較

はじめに 最近ディープラーニング用にGPUのないPCにDIGITSを

Windows用のシンプルなストップウォッチソフト紹介

Windows(10)でも使える使いやすいKAZAMITimerという

MNISTをDIGITS 5のCPUのみで試す(GPUなし)

はじめに DIGITSを使えばGUI操作で簡単にディープラーニングが

Windowsユーザが初めてMacBookを購入したときの注意点や感想

最近12インチのMacBookを購入しました。今までWindowsしか

Redmine3.2をUbuntu14.04にインストールして躓いた所についてメモ

はじめに Ubuntu14.04 ServerにRedmine3.2

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

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

→もっと見る

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