• 締切済み

OpenCVでcvSetImageROIについて

OpenCVで画像aから画像bをcvSetImageROIで切り抜きました. 画像aと切り抜いた画像bの画素値を比較すると,同じところを見ているはずなのに, 上と下で画素値が少しづつ違っています. cvSetImageROIで画像の輝度値が変わってしまうことはありますか?(輝度値を見たのはmatlabです)

みんなの回答

  • myuki1232
  • ベストアンサー率57% (97/170)
回答No.2

> OpenCVで画像を記録するときにAもBもJPEGで記録しました. Bを出力するときにJPEGにしているのであれば、再圧縮がかかって画像が変化(劣化)している可能性が高いです。 JPEGは非可逆圧縮なので、画素値が変化して困る用途には使えません。 > 人物が映っている画像です。 > > 背景と人物が映っている画像Aと 人物のみ映っている部分(背景を含めて)をAから切り出した画像Bを > 比較しました. > 全く同じ輝度値の画像のはずなので, > matlabで画像を読み込みました.そうすると数値が上記の画像のように出てくるので, > 輝度値が変わっていることに気付きました。 聞きたかったのは、画像の色数やファイルのフォーマットは何か、輝度値をどうやって計算したかです。 (おそらくJPEGで出力していることが原因と思いますので、無理に答えなくてもいいです。)

全文を見る
すると、全ての回答が全文表示されます。
  • myuki1232
  • ベストアンサー率57% (97/170)
回答No.1

cvSetImageROI で輝度値が変わることはありません。 処理しているのはどのような画像ですか? どうやって比較しましたか? JPEG などに出力してませんか?

powato
質問者

補足

人物が映っている画像です。 背景と人物が映っている画像Aと 人物のみ映っている部分(背景を含めて)をAから切り出した画像Bを 比較しました. 全く同じ輝度値の画像のはずなので, matlabで画像を読み込みました.そうすると数値が上記の画像のように出てくるので, 輝度値が変わっていることに気付きました。 OpenCVで画像を記録するときにAもBもJPEGで記録しました.

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

関連するQ&A

  • OpenCVにおいてのYCrCb値の求め方

    こんにちは OpenCVを用いてカメラに映る画像の輝度値のCr,Cb成分(画素数全体の平均を取り)を表示する プログラムを作ろうと考えているんですが、サイトを検索していると輝度値の求め方が・・・ Y→輝度値, Cr,Cb→輝度値からそれぞれR成分,B成分を引き取ったもの R,G,B→RGBそれぞれの値,delta→8ビット画像(128) があるとしまして Y = 0.299*R + 0.587*G + 0.114*B Cr = 0.5*R - 0.419*G - 0.081*B + delta Cb = -0.169*R - 0.332*G + 0.5*B + delta と Y = 0.299*R + 0.587*G + 0.114*B (Yは同じ式) Cr = 0.713 * (R - Y) + delta Cb = 0.564 * (B - Y) + delta 2通りあります.どちらの式も違う値(小数部の範囲で)が出ます. どちらが正しいCr成分,Cb成分を求める式なのでしょうか? あるいどちらがより正確な値が求められるのでしょうか? 画像処理を始めたばかりでなので,ご教授よろしくお願い致します.

  • MatlabとOpenCVの膨張・収縮の違い

    今,matlabの中で画像を2値化して膨張・収縮作業をしていて OpenCVでも同じ画像を使い,やっています。 しかし,まったく同じ構造化要素を用いて同じ回数膨張・収縮しても matlabのほうがより膨張していて,OpenCVはあまり膨張せず,matlabで連結していたところが とぎれとぎれになっています. 膨張・収縮回数を増やせば解決しますが, OpenCVとMatlabでもともとからやり方が違うのでしょうか? 理由がわかりましたら回答お願いします.

  • openCVについて‥

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

  • 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で、画像の平均階調値より小さい画素の階調値を0(または25

    OpenCVで、画像の平均階調値より小さい画素の階調値を0(または255)にするフィルタを作りたいのですが、どのようにすればよいでしょうか。よろしくお願いします。

  • opencvのテンプレートマッチングについて

    私は、webカメラを使用し、動画像中の手形をリアルタイムで検出して、その手形に近い指文字を判別して、「あ」の形なら『あ』といった様に順次表示していくといったプログラムを作成しています。 現在、手の部分だけを抽出し、それをhandImageという画像として生成する段階まで来ました。 この後、このhandImageと、あらかじめ用意しておいたテンプレート画像(手の指文字画像)を比較し、handImageに似ている画像を求めるために、テンプレートマッチングを使用したいのですが、うまくいきません。 色々試しましたが、 "Sizes of input arguments do not match (image and template should have the same type)" と出てきたりで動きません。 それぞれの画素を読み込み、輝度値を比較していって似てる画像を探す方法なども考えました。 ザックリとしたソースコードを載せておきます。 IplImage *handImage = cvCreateImage(cvSize(100,100),IPL_DEPTH_8U,1); //手形部分の切り取り画像 IplImage *templateImage; for(int i = 26; i < 26; i++){ //テンプレ画像26枚を読み込む templateImage = cvLoadImage("yubimoji1.bmp") for(int y=0;y<lpt.y-fpt.y;y++){ for(int x=0;x<lpt.x-fpt.x;x++){ if( pix=(uchar)(skinImage->imageData[skinImage->widthStep*(y+fpt.y)+x+fpt.x]); //画素読み込み                   value1 == value2; //それぞれ輝度値を照らし合わせていく                   value ++;                  }                 ・                 ・                 ・            if(value > 100 * 100 * 0.8)                printf("あ\n");             else                printf("い\n"):                 ・                 ・                 ・ とまぁ、全然意味不明状態ですね。。。 どなたか、カメラ上(リアルタイム映像)でのテンプレートマッチングの方法、あるいはザックリとソースコードを書いて頂けたら、とても助かります。。。 よろしくお願いします。 動作環境 Windows 7 OpenCV_1.1pre1a Visual C++ 2008 Express Edition

  • opencvについてご相談があります。

    http://tefunamu.com/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/opencv/%E3%80%90ios%E3%80%91xcode%E3%81%A7opencv%E3%82%92%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A/ 上記のページにあるopencvのサンプルコードを試してみたのですが、 エラーが出てうまくいきません。 ヘッダファイルに「#import <opencv2/highgui/ios.h>」を貼付けた所、 「'opencv2/highgui/ios.h'file not found」というエラーメッセージが出ます。 どなたか解決方法をご教示頂けないでしょうか。 以上、何卒宜しくお願い致します。

  • opencvでのヒストグラム比較

    opencv初心者です。 画像処理に興味を持ち、opencv を使い画像の比較をしたいと思っています。 http://d.hatena.ne.jp/ninoseki/20090208 上記のページのプログラムを試し、無事結果は出たのですが Correlation、Chi-square、Intersection、Bhattacharyya distance の4つの違いがわかりません。 どなたか詳しい方ご教授お願いしたいします。 ちなみに、作りたいプログラムは異なる2枚の画像を読み込み、どれぐらい似ているのか判断するものです。 よろしくお願いします。

  • OpenCv ヒストグラム比較について

    OpenCv ヒストグラム比較について 画像の色を比較するためにヒストグラムを比較する関数cvCompareHistを使って比較しています。 ですが↓の画像の図形でRGB成分を分けてからそれぞれを比較したのですが、必ずどの成分も一致とでます。 ヒストグラムは色の分布を持っていてその分布を比較しているんですよね? cvCompareHistがいまいちなにを比較しているのかがはっきりとわからない状態です。

  • OpenCVによる4値化について

    OpenCVを使って画像を4値化したいのですが、アルゴリズムはわかっているのですがどうプログラムを組めばいいのかわかりません。 アルゴリズムはまず濃度ヒストグラムを作って (1)適当な閾値を3つ(t1,t2,t3),決める。 (2)4つの領域で平均濃度を計算し、それらをa1,a2,a3,a4とする。(4つの領域ってどこ? (3)新閾値t1,t2,t3とt1=(a1+a2)/2,t2=(a2+a3)/2,t3=(a3+a4)/2として計算する。 (4)Σ(j=1,3) |tj-tj|<εならば停止。そうでなければ(2)に戻る。 なのですが、教えて下さい。

印刷後のコピー用紙の折れ線
このQ&Aのポイント
  • 印刷後のコピー用紙に巻き込みしたような折れ線があります
  • EPSON社製品を使用した印刷後、コピー用紙に見られる折れ線の問題について
  • 印刷後のコピー用紙に生じる折れ線の原因と解決策について
回答を見る