double operation::colorCastDetection(IplImage pFrame)
{
IplImage labFrame = cvCreateImage(cvGetSize(pFrame),pFrame->depth,pFrame->nChannels);
cvCvtColor(pFrame,labFrame,CV_BGR2Lab);//lab:l為亮度,a為紅->綠,b黃—>藍
double da = 0;//色度a的平均值
double db = 0;//色度b的平均值
double D = 0;//圖像平均色度
double Ma = 0;//色度a的方差
double Mb = 0;//色度b的方差
double M = 0;//色度的中心矩
double K = 0;//圖像偏色因子
int height = labFrame->height;//圖像高度
int width = labFrame->width;//圖像寬度
uchar* labData = (uchar*)labFrame->imageData;
for(int i = 0;i < labFrame->height;i++)
{
for(int j = 0;j < labFrame->width;j++)
{
da += labData[i * labFrame->widthStep + j * labFrame->nChannels + 1];
db += labData[i * labFrame->widthStep + j * labFrame->nChannels + 2];
// cout<<"da "<widthStep + j * labFrame->nChannels + 1]<
// coutwidthStep + j * labFrame->nChannels + 2]<<endl;
}
}
da = da/height/width;
db = db/height/width;
D = sqrt(pow(da,2) + pow(db,2));
代碼中的算法方程為什麼要+1+2
為什麼是用加的
你的注釋寫了
da為紅->綠,db黃—>藍
red 紅 0
green 綠 1
blue 藍 2