0
点赞
收藏
分享

微信扫一扫

opencv同态滤波

//输入灰度图像
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);
举报

相关推荐

0 条评论