cv::Mat dst = cv::Mat::zeros(width,height,CV_32FC1);
src.convertTo(src,CV_32FC1);
for(int i = 0; i < width; ++i)
{
float *sdata = src.ptr<float>(i);
float *ldata = src.ptr<float>(i);
for(int j= 0; j< width; ++j)
{
ldata[j]=std::log(sdata[j]+1);
}
}
cv::Mat d = cv::Mat::zeros(width,height,CV_32FC1);
cv::dct(src,d);
float gh,gl,c,d1,d2;
cv::Mat huv = cv::Mat::zeros(width,height,CV_32FC1);
for(int i = 0; i < width; ++i)
{
float *huvdata = src.ptr<float>(i);
for(int j= 0; j< width; ++j)
{
d2 = std::pow(i-floor(width/2),2)+std::pow(j-floor(height/2),2);
huvdata[j] = (gh-gl)*exp(-d2/(d1*d1))+gl;
}
}
huv.ptr<float>(0)[0]=1.5;
dct = dct.mul(huv);
cv::idct(dct,dst);
for(int i = 0; i < width; ++i)
{
float *sdata1 = src.ptr<float>(i);
float *ddata1 = dst.ptr<float>(i);
for(int j= 0; j< width; ++j)
{
ddata1[j]=std::exp(sdata1[j]+1);
}
}
dst.convertTo(dst,CV_8UC1);
|