OpenGL de プログラミング - OpenCV::平均と標準偏差
現在地
>>
メニュー
>>
サンプルコード::OpenCV
>> OpenCV::平均と標準偏差
問題
以下の画像を読み込んで、各色要素ごとに「平均」と「標準偏差」を求めよ。
画像
答え
#include <iostream>
#include <cv.h>
#include <highgui.h>
using namespace std;
/**********[プロトタイプ宣言]****************/
void OUTPUT_Avg_Sdv(const CvScalar &mean,const CvScalar &std_dev);
/***********[メイン関数]***************/
int main(int argc, char **argv)
{
CvScalar mean = cvScalarAll(0);
CvScalar std_dev= cvScalarAll(0);
IplImage *imgA = cvLoadImage( "file2.jpg", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
if(imgA ==NULL)
{
cout<<"Can't Load Image ." << endl;
return (-1);
}
cvNamedWindow("window",CV_WINDOW_AUTOSIZE);
cvShowImage("window",imgA);
cout << "calc Mean and standard deviation...\n";
cvAvgSdv( imgA , &mean, &std_dev);
OUTPUT_Avg_Sdv(mean,std_dev);
cvReleaseImage( &imgA );
cvWaitKey(0); // 0秒待つ => ずっと入力待ち
cvDestroyWindow("window");
return 0;
}
/*******************[ここから、各種関数]*****************/
void OUTPUT_Avg_Sdv(const CvScalar &mean,const CvScalar &std_dev)
{
cout << "Mean(B,G,R) = ( ";
cout << mean.val[0] << ", " << mean.val[1] << ", " << mean.val[2]<<" )"<<endl;
cout << "std_dev(B,G,R) = ( ";
cout << std_dev.val[0] << ", " << std_dev.val[1] << ", " << std_dev.val[2]<<" )"<<endl;
}
メモ
参考
opencv.jp(統計)
opencv.jp(基本構造体)
CvScalar構造体
以下のように定義されている。
typedef struct CvScalar
{
double val[4];
}
CvScalar;
計算結果は、
val[0] ー
青
val[1] ー
緑
val[2] ー
赤
の順に格納される。