• 締切済み

c言語によるアルゴリズム

やりたいことは、たくさんの画像をいくつかのグループ(1グループに画像が数十種類)用意し、入力画像とそれらを比較します。そして、最も入力画像に似ている画像があるグループを選び出します。画像自体はx-y座標に点がある程度です。似た画像かどうかは、openCVのcvMatchShapesを使おうかと考えています。 参考 http://opencv.jp/sample/matching.html 画像を呼び出そうと思うと、一つ一つ画像名から呼び出すと思うのですが、大量の画像を呼び出すことを考えると、画像名を全て書いていたのではプログラムが長くなると思います。何かいい方法はないでしょうか。 また、座標値がわかっていますので、数値でグループを特定できる方法があれば、そちらの方法を教えてもらいたいです。 こちらはプログラミング、画像処理ともに初心者です。他にいい方法があれば,それも教えてもらえるとうれしいです。よろしくお願いします。

みんなの回答

  • masaota56
  • ベストアンサー率41% (58/139)
回答No.1

> 画像を呼び出そうと思うと、一つ一つ画像名から呼び出すと思うのですが、大量の画像を呼び出すことを考えると、画像名を全て書いていたのではプログラムが長くなると思います。何かいい方法はないでしょうか。 フォルダに分けて、プログラムから構造を読み取るのが楽だと思います。 例:  img   |--group1   |  |--img1.bmp   |  L--img2.bmp   L--group2      L--img3.bmp  この場合、imgディレクトリを再帰処理で全て読み込みます。  これなら、再帰処理中にグループ分けをするか、  全て読み込んでからフルパス名でグループ分けができます。

関連するQ&A

  • 抽出した特徴点の座標を取得したいのですが…

    OpenCVの特徴点を抽出するサンプルプログラム http://opencv.jp/sample/gradient_edge_corner.html#goodfeaturesを使用して, 特徴点の座標をx,y座標として取得したいと思っているのですが, 関数cvFindCornerSubPix()の2番目の引数cornersに, 「コーナーの初期座標が入力され,高精度化された座標が出力される」 とあったので,出力してみたところ,5~6桁の数字がズラーッと表示されました. この数字が高精度化された座標なのでしょうが, 特徴点座標をx,y座標として取得する方法はないのでしょうか? ご存知の方がいらっしゃれば,ご教授いただけると幸いです. よろしくお願いいたします.

  • C言語のファイル読み込み

    以前の質問で書いているプログラミングでの延長上質問なのですが、 C言語でファイル名を自分で入力したとします。 使われている拡張子は既知なので、「????.csv」の「????」(後に入力する為、文字数不明、数値混じり、コンマも混じる)だけを格納したいのですが、どうすればいいでしょうか?

  • OPENCVでの複数テンプレートマッチング

    OPENCVを使って複数の画像を検出したいです。 こちらのサイトのようなことをしたいです。こちらはMAT型です。 私の使っている型ではうまくいきません。 http://workpiles.com/2015/05/opencv-matchtemplate-java/ 私のソースコードは下記の型を使用しております。 この型で複数マッチングするにはどうしたらよいでしょうか。 どなたかご教授いただけないでしょうか。 http://opencv.jp/sample/matching.html 

  • C言語の作成依頼です。

    C言語でカラー画像をグレースケール化するプログラムを作成していただけませんか? 入力画像と出力画像のフォーマットはppmで計算方法は重み付けした輝度の計算で処理したいと思っています。 (0.299 * R + 0.587 * G + 0.114 * B) Opencvを使わないで作成お願いします。 画像のサイズは360×270 です。 できるだけ計算時間のかかるも

  • c言語課題

    4×4のマス目のうち1ヶ所を選び、そこに爆弾をおいておく。マス目の座標は左上が(0,0),右下が(3,3)である。実行を開始するとプレーヤーにマス目の1ヶ所を選ばせ(x座標とy座標を入力)、爆弾の置かれたマス目であった場合は”wham!”と表示する。このプログラムを、以下のように改良せよ。 (a)15回試行して爆弾を見つけられなかった場合は、”You Win!”と表示してプログラムを終了する。 (b)1度選んだマス目は再度選べないようにする(試行の回数には含めない)。 (c)マス目の範囲(0,1,2,3のいずれか)から外れた数値を打ち込んだ場合に警告を出すようにする(試行の回数には含めない)。 (d)1度選んだマス目が分かるように、下の表示を行う。 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 マス目[1,2]を選んで爆弾に当たらなかった場合、その場所に1を表示

  • 散布図(0,0)を原点に±表記して、背景に画像を

    説明が苦手で伝わるか心配ですが、、 散布図を(0.0)を原点に±表記して、 その背景に画像(地図)を埋め込みたいと思ってるんですが、、どうすればいいでしょうか。。 どういう仕組みか、それに使う言葉も調べても分からなかった為、情報をいただけると嬉しいです。 やりたい事は、 (1) (0.0)を原点にしたX軸、Y軸のある座標を作る事。±400,400で作りたいです。座標は100以上作ります (2) (1)で入力したものを特定の地図上に反映する事。画像のサイズで調整するのでこれはなくても。。 (3) 出来たら、グループ付けや関連付けがしたい (4) 特定の座標からの距離を(3)のグループ1つ1つから出したい。 こんな感じです。よろしくお願いしますm(。。)m

  • C言語の課題がわからないです。

    課題がわからないので質問します。 問題は 以前作成したグラフィックスインタプリタ cg.c を元にして,画像ファイルを貼り付ける機能を実装せよ.ただし,次の関数を定義すること. 画像のサイズを調べるためのアクセス関数 int PbmGetWidth(Pbm *pbm) および int PbmGetHeight(Pbm *pbm): pbm->width,pbm->height を返す. 画像を貼り付けるための関数 void PutImage(Pbm *pbm, int x, int y, char *filename):画像(ファイル名 filename )を座標(x,y)に貼り付ける. 以前作成したグラフィックスインタプリタ cg.c を元にして,画像ファイルを貼り付ける機能を実装せよ.ただし,次の関数を定義すること. 画像のサイズを調べるためのアクセス関数 int PbmGetWidth(Pbm *pbm) および int PbmGetHeight(Pbm *pbm): pbm->width,pbm->height を返す. 画像を貼り付けるための関数 void PutImage(Pbm *pbm, int x, int y, char *filename):画像(ファイル名 filename )を座標(x,y)に貼り付ける. 命令ファイルはこんな感じです。 clear 0 line 60 120 260 120 1 line 160 20 160 220 1 circle 110 70 40 1 circle 210 170 40 1 image 180 50 c.pbm image 210 30 c.pbm image 210 70 sign.pbm image 240 50 sign.pbm 貼り付けられる画像 c.pbm P1 10 11 0000000000 0001111000 0011111100 0111001110 0110000110 0110000000 0110000110 0111001110 0011111100 0001111000 0000000000 プログラムを書いたのですが、間違ってるところをお願いします。

  • Cプログラミングで困っています><

    添付した画像のように配列がx>y>zの順に並べ替えられました。実際はもっとデータありますが、省略します。 よくご覧いただけるとうれしいですが、二つのx座標の絶対値差が2以内かつ二つのy座標の絶対値差が2以内かつstate==1かつstate Flag==3であれば、(x,y固定)z方向に伸びる一つのグループ(何個かの球体が構成する直線)と見なします。(それぞれ行のx,y,z座標値は球体それぞれの中心座標である) さらに直線のグループ数とグループを構成する球体数を数えて、出力します。 以上のことですが質問の内容です。 まず配列を作り、例えばx[N]配列を作ったとします,座標の絶対値の差をdiff1,y[N]配列を作り、座標の絶対値差をdiff2と定義し, さらにz[N]配列を作ります。 for(i=0;i<N;i++){ diff1=x[i+1]-x[i]; diff2=y[i+1]-y[i]; } if(diff1<2&&diff2<2&&state==1&&stateFlag==3){ for(i=0;i<N;i++){ printf(“%lf”,x[i]); printf(“%lf”,y[i]); } } でもこの考えだとindexの番号がもともとバラバラなので、配列の番号として理解できないし、表示もちょく座標だけをx,y座標の表示だけして終わり、z方向に伸びるグループ数もわからないし、それぞれのグループを構成する球体数もわかりません。 よろしければ、ご教授いただければ幸いです。

  • VB6で、C言語の(argv,argc)みたいな、コマンドライン引数を実現する方法は?

    Microsoft-VisualBasic6でプログラミングしてます。 外部から(不特定の)ファイル名を指定して、 VBモジュールを起動して処理をしたいのですが、 C言語でいう、(argv,argc)みたいなものを使って(いわゆるコマンドライン引数)、 VBプログラミングする方法を教えて下さい。 <実行例>  ・(モジュール名) (任意のファイル名)   vbmodule.exe sample-a.cvs

  • OpenCVを使った画像の切り抜き

    添付画像のように、サイズ(X,Y)の画像があったとします。 その画像のある座標(X',Y')とサイズを指定してできた短形領域を、IplImageとして保存するにはどうすればいいのでしょうか? OpenCVを使ってるのですが、そういった関数はなかったでしょうか? よろしくお願いします。

専門家に質問してみよう