• ベストアンサー

openCVについて‥

openCVでIplImage構造体の変数に格納された画像の座標値(i,j)の画素RBG値を取れだす方法を知れたいのですが、ご存知の方、是非ご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • clsdi99
  • ベストアンサー率63% (31/49)
回答No.1

ここに書いてあるの違います?

参考URL:
http://limu.is.kyushu-u.ac.jp/~yosimoto/work/opencv-howto/opencv-sample-pixel-op.html
ev_galois
質問者

お礼

ありがとうございます!!助かりました!!!!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • opencvの画像データを格納する構造体IplImageについて質問で

    opencvの画像データを格納する構造体IplImageについて質問です。 今opencvを用いて画像処理をしていて、test1とtest2という画像データを宣言して test1からは横:縦が640:512の画像を読み込みます。 そして、IplImageの中のImageDataにアクセスし、test2のImageDataにtest1のImageDataを 各ピクセルに代入して、test2という画像データをウィンドウに表示させたいと思ってます。 私的にはtest1とtest2には同じ画像データが表示されると考えているのですが、実際に実行してみると 少し違う画像が表示され、次のようなエラーが表示されます。 「"0x7c951909"の命令が"0xfffffff8"のメモリを参照しました。メモリが"read"になることはできませんでした。」 実際にCの中では以下のようにプログラムを組んでいます。 for(i=0;i<test->height;i++){ for(j=0;j<test->widthStep;j++){ *(test2->imageData+test2->widthStep*i+j)=*(unsigned char *)(test->imageData+i*test->widthStep+j); } } 何が原因なのか教えていただけないでしょうか。

  • OpenCV2-画素を配列に格納したい

    こんにちは。 私のパソコンにはOpenCV2.3をインストールしています。 たとえば、 IplImage* img; で読み込んだ画像を pixel[x][y] といった2次元配列に格納したいです。 といいますのも、 for(int i = 0; i < img->width; i++){ for(int j = 0; j < img->heifht; i++){ pixel[i][j] = ~~~~~~; } } といった処理をしたいからです。 ちなみに、この2次元配列にはRGBと輝度値が入っていればOKです。 ...説明が不十分ですが、どうか教えていただけるとすごく助かります>< お願いします!

  • openCVの画像処理について

    画像の中にある粒子の位置を検出し、座標の値の取得をどうしてもOpenCVをつかって、出したいと考えております。 プログラミングが実行したら、すべて0と表示されたり、エラーが出たりします。 現在、画像を読み込み、2値化し、2値化した画像の画素数を列ごとに足して、垂直方向の画素数の最大値の検出、2値化した画像の画素数を行ごとに足して、水平方向の画素数の最大値の検出を行っています。 使用した画像を添付させていただきますので、もしアドバイスなどいただけたらよろしくお願い致します。 #include <stdio.h> #include <math.h> #include <cv.h> #include <cxcore.h> #include <highgui.h> #define X 640 #define Y 480 IplImage *grayImage; //グレースケール画像用IplImage IplImage *binaryImage; //2値画像用IplImage char windowNameBinarization[] = "Binarization";//2値化した画像を表示するウィンドウの名前 int levels = 115; //トラックバーの値(2値化の際の閾値) static int h[X][Y]; int main( /*int argc, char **argv*/ ){ // 画像を読み込む IplImage *sourceImage = cvLoadImage( "C:/Documents and Settings/Owner/My Documents/My Pictures/Logicool Webcam/Picture 10.jpg",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); if ( sourceImage == NULL ) { // 画像が見つからなかった場合 printf( "画像が見つかりません\n" ); return -1; } // 画像を生成する IplImage *grayImage = cvCreateImage( cvGetSize(sourceImage), IPL_DEPTH_8U, 1 );//グレースケール画像用IplImage IplImage *binaryImage = cvCreateImage( cvGetSize(sourceImage), IPL_DEPTH_8U, 1 ); //2値画像用IplImage // BGRからグレースケールに変換する cvCvtColor( sourceImage, grayImage, CV_BGR2GRAY ); // グレースケールから2値に変換する cvThreshold( grayImage, binaryImage, levels, 255, CV_THRESH_BINARY ); /*グラフ値の取得*/ IplImage *img; img = cvCloneImage (binaryImage); //画像をコピー int bytes_per_pixel = ((img->depth & 255) / 8) * img->nChannels; // (1)画素値を順次取得 int i,j,k,t; int Hy[Y],Hx[X]; //宣言 //垂直方向の画素値 for(k = 0; k <Y /*img->height*/; k++) { Hy[k] = 0;//初期化 } if((unsigned char)img->imageData>levels){ for(j = 0;j < Y/*img->height*/; j++) { for(i = 0; i < X; i++) {Hy[j] += *(img->imageData + (img->widthStep*j) + (i*bytes_per_pixel)); } }} //水平方向の画素値 for(t = 0; t < X/*img->width*/; t++) { Hx[t]=0; //初期化 } if((unsigned char)img->imageData>levels){ for(i = 0;i < X/*img->width*/; i++) { for(j = 0;j < Y; j++) { Hx[i] = Hx[i]+h[i][j]; } }} //Hy[j]の最大値の座標を調べる int MY = Hy[0]; int my = 0; for(int j=0; j< Y-1; j++){ if(Hy[j]<Hy[j+1]){ MY = Hy[j+1]; my = j+1; } } //Hx[i]の最大値の座標を調べる int MX = Hx[0]; int mx = 0; for(int i=0; i< X-1; i++){ if(Hx[i]<Hx[i+1]){ MX = Hx[i+1]; mx = i+1; } } printf("垂直方向の最大値 %d , 垂直方向の最大値になるときのy軸の値 %d \n", MY,my); printf("水平方向の最大値 %d , 水平方向の最大値になるときのx軸の値 %d \n", MX,mx); int cvWaitKey(int delay=10); //どこでとめるかをあらわす cvReleaseImage( &sourceImage ); cvReleaseImage( &grayImage ); cvReleaseImage( &binaryImage ); cvDestroyWindow( windowNameBinarization); return 0 ; }

  • OpenCVのIplImage型に関する質問

    OpenCVのIplImageという構造体は http://hp.vector.co.jp/authors/VA025246/opencv/004.html のようになっているようなのですが, 画像をキャプチャした際に、「画素のdepthが 8(bit)でチャンネル数3(RGB)のとき」、 char *imageData から、一直線の配列として画像がRGBRGBRGB・・・という風に並んでいて、それぞれの大きさがcharだというのはわかりました。 そこで、imageDataのポインタを進めていって(+1したり+2したりすることで)画像データを読み込んでいます しかし、「depthが32(bit)でチャンネル数1(グレイ画像)のとき」、同じように辿っても、正しいデータが得られませんでした(0.00000という画素値やありえないぐらい大きい値)。 型がcharなので、そこがおかしいのかと思いますが、 char型から始まる画像データなのに、double型(32bit)をどうやっていれてあるのか見当もつきませんし、どうやって32bitずつポインタを進めていくのかもわかりません。 そもそも、ここに本当にデータが入ってるのか・・・(汗 OpenCV経験者の方は少数だと思いますが、画像処理経験者の方など、何か思いつくところがある方、ぜひとも意見をお願いしますm(_ _"m)ペコリ

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

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

  • 【OpenCV】IplimageをDirectXのテクスチャとして利用する方法

    Webカメラにてキャプチャした動画像を,二値化,アフィン変換等の処理を施し,このイメージをテクスチャとしてポリゴン等に貼り付けてリアルタイム表示するといったことを考えています. キャプチャから画像処理まではOpenCVを利用すると簡単そうなのですが,OpenCVで採用されている画像の構造体IplimageをどのようにしたらDirect3D用のテクスチャにできるのかわからず,困っております. そもそもそのようなことができるのかも良くわかりません. どなたか,よろしくお願いします.

  • OpenCVでの画像処理について

    OpenCVを用いて連続して画像処理を行おうとしています。 単にcvLoadImageを用いて画像処理を行うことはできるのですが、 if(k=1)IplImage *img = cvLoadImage( "gazou1.jpg", -1); if(k=2)IplImage *img = cvLoadImage( "gazou2.jpg", -1); とif文を用いて画像を取り込んで処理して破棄して、新しい画像を取り込んで…と連続して異なる画像を同じ処理をするプログラムを作ると error C2065: 'img' : 定義されていない識別子です。 error C2227: '->height' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。型は ''unknown-type'' です。 error C2227: '->width' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。型は ''unknown-type'' です … とたくさんのエラーがでてしまいます。 if文を使わずに同じ画像を何度も処理することはできるのですが… この解消法をわかる方は教えてください。 ぜひ、よろしくお願いします。

  • opencvのシーケンスについて。

    opencvのシーケンスについて。 opencvのシーケンスとは。 opencvを使っていると、よくシーケンスという言葉に遭遇します。本やネットで調べましたが、どんなものなのかがよく分かりません。 メモリストレージ・オブジェクト等と一緒に出てくるのですが、これらもなかなか理解しがたいです… 例えばCvFindCountorという画像内のn個の辺を持つ輪郭を調べるという関数がありますが、これに関する情報が引数として渡したシーケンスに保存されているようだ。というのは何となく感じとったのですが、この中の座標等を引き出すにはどうしたらいいのでしょうか。 どなたか分かりやすくご教授頂けないでしょうか。 また、分かりやすいサイトや本もご存知であれば教えて下さい。

  • 画像ボードのバッファにある画像をOpenCVで処理する方法を教えてください

    カメラの画像をグラフインというメーカーの画像ボードを介してPCに取り込んでいます。 ここでその画像をOpenCVを使用して処理しようとしています。 一度保存した画像を処理するのはできるのですが、 画像ボードのバッファからデータを読み込んできてきて処理する方法が分からず困ってます。 Iplimageという構造体にデータを入れればよさそうなのですが、 その変換のやり方がわかりません。 開発環境はWindowsXP visual C++ 2005 MFC です。 当方、プログラムを始めたばかりなので できれば詳しく教えて頂けると助かります。 よろしくお願いいたします。

  • C++ OpenCV Mat CvMat Ipl

    C++ OpenCV2.4についての質問です. cv::Mat CvMat IplImage など他にもデータ形式はあると思うのですが・・・. 画像処理に用いる場合に, 画像読み込みついて CvMatはcvLoadM IplImageはcvLoadImage 画像のメモリ取得について CvMatはcvCreateMat IplImageはcvCreateImage とあるのですが,cv::Matはないように思います. 最初はIplImage型やCvMat型でデータを取得するのではなく Loadの時点からcv::Matを使う方法はありませんか?