ImagingSolのプロフィール
- ベストアンサー数
- 4
- ベストアンサー率
- 80%
- お礼率
- 0%
- 登録日2009/01/07
- Webサイト http://imagingsolution.blog107.fc2.com/
- 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成分を求める式なのでしょうか? あるいどちらがより正確な値が求められるのでしょうか? 画像処理を始めたばかりでなので,ご教授よろしくお願い致します.
- OpenCV cvmatchtemplate
OpenCVで画像一致検出のプログラムを組んでいます。 Cvmatchtemplateは動作していますが、そのパラメーター、 CV_TM_SQDIFFはSquared difference 輝度差の二乗和 CV_TM_CCORRはCross correlation 相互相関 CV_TM_CCOEFFはCorrelation coefficient 相関係数 でNORMEDはそれらの正規化したもの と言う所までは判ったのですが、(分かったでは無い-笑-)それらの意味が良く分かりません、かろうじて理解出来るのは輝度差の二乗和のみです。 私としては各々の詳細を理解出来なくても、どの様な結果を導きたい時使うパラメーターかが判れば良いのですが、色々サイトを探しても、数式が書かれている所はありますが具体例が書かれている所が見つかりませんでした。 どなたか良いサイト、もしくは本をご存知無いでしょうか。 よろしくお願いいたします。
- ビットマップを二値化した後の座標取得のご相談
ビットマップを二値化した後の座標取得のご相談 最近VB6.0からVC++2008(Express Edition)に乗り換えて画像処理を試みています(WinXP).現在,長方形が写っているビットマップ画像を二値化して,指定範囲内の長方形の平均高さ(白を抽出)を調べようとしています.WEBや文献など調べて,二値化するところまではできたのですが,二値化後の白黒画像の座標値の読み方が分からないため,長方形の高さを算出することができません.もしよろしければご助言いただけましたら幸いに思います. ─────────────────────────────────── VB6.0プログラム(二値化後の処理の部分) Dim Xmin As Double, Xmax As Double //X方向 Dim Ymin As Double, Ymax As Double //Y方向 Dim SumY As Double, AveY As Double Dim Pix As Double ' Xmin = 0 Xmax = Shape1.Width SumY = 0 //長方形の高さの合計 AveY = 0 //長方形の高さの平均 ' For X = Shape1.Left To Shape1.Left + Shape1.Width Ymin = 0 Ymax = 0 ' For Y = Shape1.Top To Shape1.Top + Shape1.Height //囲んだ四角部分において ' //※この下の部分をVC++2008でどのようにすれはいいかわかりません・・・ If picturebox1.Point(X, Y) = RGB(255, 255, 255) Then //白があれば If Ymin = 0 Then //Yminが0であれば Ymin = Y //YminはY End If If Ymax < Y Then //YmaxがYより小さかったら Ymax = Y //YmaxはY End If End If ' Next Y SumY = SumY + Ymax - Ymin //Xごとの長方形の高さの合計 Next X ' AveY = SumY / Xmax //平均高さの算出 ─────────────────────────────────── ここからVC++2008(二値化と計算を一気に行えればいいなと思ってます) for (j = 0; j < rect.Height; j++) { for (i = 0; i < rect.Width; i++){ //輝度値の取得 B = pBuf[i * Step + j * bmpData->Stride]; //青 G = pBuf[i * Step + 1 + j * bmpData->Stride]; //緑 R = pBuf[i * Step + 2 + j * bmpData->Stride]; //赤 //輝度値の設定(二値化) if ((B >= Threshold) || (G >= Threshold) || (R >= Threshold)) { //白に変換 pBuf[i * Step + j * bmpData->Stride] = 255; //青 pBuf[i * Step + 1 + j * bmpData->Stride] = 255; //緑 pBuf[i * Step + 2 + j * bmpData->Stride] = 255; //赤 //※ここに何かいれればいいと思うのですが,上記の //※If(picturebox1.Point(X,Y)=RGB(255,255,255))に代わる書き方が分かりません… } else { //黒に変換 pBuf[i * Step + j * bmpData->Stride] = 0; //青 pBuf[i * Step + 1 + j * bmpData->Stride] = 0; //緑 pBuf[i * Step + 2 + j * bmpData->Stride] = 0; //赤 } } 参照WEB http://imagingsolution.blog107.fc2.com/blog-entry-40.htm
- ベストアンサー
- C・C++・C#
- kanemaru_okweb
- 回答数2
- 画像処理を簡単に扱えるということを知り、OpenCV2.1をインストー
画像処理を簡単に扱えるということを知り、OpenCV2.1をインストールしました。 インストールは http://imagingsolution.blog107.fc2.com/blog-entry-207.html のページの初心者向けの方を参考にしました。 本体のインストール後、Visual Studio 2005 のインクルードファイルとライブラリの設定を行いました。本体のインストール先をCドライブ直下にしたため、以下のパスを設定しました。 c:\OpenCV2.1\include\opencv c:\OpenCV2.1\lib また、環境変数のpathの部分に以下のパスを設定しました。 c:\OpenCV2.1\bin 設定後、簡単なサンプルプログラムを下記の簡単なサンプルプログラムを実行してみました。 画像を読み込み、それを表示するだけのものです。 --------------------------------------------------- #include "cv.h" #include "highgui.h" #ifdef _DEBUG //Debugモードの場合 #pragma comment(lib,"cv210d.lib") #pragma comment(lib,"cxcore210d.lib") #pragma comment(lib,"cvaux210d.lib") #pragma comment(lib,"highgui210d.lib") #else //Releaseモードの場合 #pragma comment(lib,"cv210.lib") #pragma comment(lib,"cxcore210.lib") #pragma comment(lib,"cvaux210.lib") #pragma comment(lib,"highgui210.lib") #endif int main(int argc, char* argv[]) { IplImage* img; // 画像ファイルポインタの宣言 char imgfile[] = "lena.jpg"; // 読み込み画像ファイル名 // 画像の読み込み img = cvLoadImage(imgfile, CV_LOAD_IMAGE_COLOR); // 画像の表示 cvNamedWindow ("lena", CV_WINDOW_AUTOSIZE); cvShowImage ("lena", img); cvWaitKey (0); cvDestroyWindow("lena"); // 画像の解放 cvReleaseImage(&img); return 0; } -------------------------------------------------- Debugモードのときにこのプログラムを実行すると以下のエラーが出ます。 「アプリケーションを正しく初期化できませんでした。(0xc0150002)」 binフォルダの中身を見てみたところ、それぞれのdllもちゃんとありました。 この症状の場合、Microsoft Visual C++ 2005 SP1 再頒布可能パッケージ (x86) をインストールしてくださいとのことでしたが、正常にインストールできたか分からない状態です。 vcredist_x86.exeを起動してみると、「WindowsにMicrosoft VisualC++ 2005 Redistributable を設定しています。しばらくお待ちください。必要な情報を集めています。」というダイアログが30秒ほど出てから消えてしまうだけです。プログラムの追加と削除の項目を見てみたところ、Microsoft VisualC++ 2005 Redistributableというものがあったのでインストールできているものと思いたいですが…。仮にうまくインストールできていたとしても症状が改善されなくて困ってます。 私は正規品のvisualC++2005をインストールしたので、そもそもこのランタイムのインストールは必要ないような気もします…。 OSはWindowsXPです。コンピュータにあまり詳しくないので詳細の環境は何を書けばいいのかがよく分かりません。解決策よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- take8793
- 回答数6
- 画像処理を簡単に扱えるということを知り、OpenCV2.1をインストー
画像処理を簡単に扱えるということを知り、OpenCV2.1をインストールしました。 インストールは http://imagingsolution.blog107.fc2.com/blog-entry-207.html のページの初心者向けの方を参考にしました。 本体のインストール後、Visual Studio 2005 のインクルードファイルとライブラリの設定を行いました。本体のインストール先をCドライブ直下にしたため、以下のパスを設定しました。 c:\OpenCV2.1\include\opencv c:\OpenCV2.1\lib また、環境変数のpathの部分に以下のパスを設定しました。 c:\OpenCV2.1\bin 設定後、簡単なサンプルプログラムを下記の簡単なサンプルプログラムを実行してみました。 画像を読み込み、それを表示するだけのものです。 --------------------------------------------------- #include "cv.h" #include "highgui.h" #ifdef _DEBUG //Debugモードの場合 #pragma comment(lib,"cv210d.lib") #pragma comment(lib,"cxcore210d.lib") #pragma comment(lib,"cvaux210d.lib") #pragma comment(lib,"highgui210d.lib") #else //Releaseモードの場合 #pragma comment(lib,"cv210.lib") #pragma comment(lib,"cxcore210.lib") #pragma comment(lib,"cvaux210.lib") #pragma comment(lib,"highgui210.lib") #endif int main(int argc, char* argv[]) { IplImage* img; // 画像ファイルポインタの宣言 char imgfile[] = "lena.jpg"; // 読み込み画像ファイル名 // 画像の読み込み img = cvLoadImage(imgfile, CV_LOAD_IMAGE_COLOR); // 画像の表示 cvNamedWindow ("lena", CV_WINDOW_AUTOSIZE); cvShowImage ("lena", img); cvWaitKey (0); cvDestroyWindow("lena"); // 画像の解放 cvReleaseImage(&img); return 0; } -------------------------------------------------- Debugモードのときにこのプログラムを実行すると以下のエラーが出ます。 「アプリケーションを正しく初期化できませんでした。(0xc0150002)」 binフォルダの中身を見てみたところ、それぞれのdllもちゃんとありました。 この症状の場合、Microsoft Visual C++ 2005 SP1 再頒布可能パッケージ (x86) をインストールしてくださいとのことでしたが、正常にインストールできたか分からない状態です。 vcredist_x86.exeを起動してみると、「WindowsにMicrosoft VisualC++ 2005 Redistributable を設定しています。しばらくお待ちください。必要な情報を集めています。」というダイアログが30秒ほど出てから消えてしまうだけです。プログラムの追加と削除の項目を見てみたところ、Microsoft VisualC++ 2005 Redistributableというものがあったのでインストールできているものと思いたいですが…。仮にうまくインストールできていたとしても症状が改善されなくて困ってます。 私は正規品のvisualC++2005をインストールしたので、そもそもこのランタイムのインストールは必要ないような気もします…。 OSはWindowsXPです。コンピュータにあまり詳しくないので詳細の環境は何を書けばいいのかがよく分かりません。解決策よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- take8793
- 回答数6