OpenCV直方图图像增强处理应用实践

2025-11-12 04:43:17

1、处理方法1:基于直方图均衡化进行图片增强处理,使图像的灰度更加均衡,适用于对比度较低的图像增强。

主要步骤:

1)读取图像

2)将图像分割到3通道对象中

3)针对每个通道进行直方图均衡化

4)最后合并分割的3通道图像进行输出

OpenCV直方图图像增强处理应用实践

2、处理方法1:使用直方图均衡化进行图片增强处理的完整代码:

//直方图均衡化处理

void testJunheng(Mat img)

{

imshow("原图", img);

Mat imgRGB[3];

split(img, imgRGB);

for (int i = 0; i < 3; i++)

{

//针对每个通道进行直方图均衡化

equalizeHist(imgRGB[i], imgRGB[i]);

}

//合并图像

merge(imgRGB, 3, img);

imshow("均衡化处理", img);

}

OpenCV直方图图像增强处理应用实践

OpenCV直方图图像增强处理应用实践

3、处理方法2:基于拉普拉斯算子的图像增强处理,使用与低对比度、地色度的图片处理,使用中心为5的8邻域拉普拉斯算子与图像卷积可以锐化增强图像的处理。

OpenCV直方图图像增强处理应用实践

4、处理方法2:完整源代码如下:

//拉普拉斯算子图像锐化增强

void testLpulasi(Mat img)

{

imshow("原始图像", img);

Mat imgEnhance;

Mat kernel = (Mat_<float>(3,3)<<0,-1,0,0,5,0,0,-1,0);

filter2D(img, imgEnhance, CV_8UC3, kernel);

imshow("拉普拉斯算子图像增强", imgEnhance);

}

OpenCV直方图图像增强处理应用实践

OpenCV直方图图像增强处理应用实践

5、处理方法3:基于Log对数变换的图像增强,适用于显示图片低灰度部分更多的细节。

对数变换可以将图像的低灰度值部分扩展,显示出低灰度部分更多的内容,将其高灰度值部分压缩,减少高灰度部分的细节,从而达到增强图像滴灰度的图像处理。

OpenCV直方图图像增强处理应用实践

6、处理方法3:基于对数log变换的图像增强,完整代码

//图像对数增强

void testLog(Mat img)

{

imshow("原始图像", img);

Mat imgLog(img.size(), CV_32FC3);

for (int i = 0; i < img.rows; i++)

{

for (int j = 0; j < img.cols; j++)

{

imgLog.at<Vec3f>(i, j)[0] = log(1 + img.at<Vec3b>(i, j)[0]);

imgLog.at<Vec3f>(i, j)[1] = log(1 + img.at<Vec3b>(i, j)[1]);

imgLog.at<Vec3f>(i, j)[2] = log(1 + img.at<Vec3b>(i, j)[2]);

}

}

//归一化

normalize(imgLog, imgLog, 0, 255, CV_MINMAX);

//转换为8 bit图像显示

convertScaleAbs(imgLog, imgLog);

imshow("Log对数增强效果", imgLog);

}

OpenCV直方图图像增强处理应用实践

7、处理方法4:基于伽马变换的图像增强

伽马变换主要用于图像矫正,将灰度过高以及灰度过低的图像进行修正处理,增强对比度。

变换公式是对原图像的每个像素值做乘积运算。

//伽马图像增强

void gamaTest(Mat img)

{

imshow("原始图像", img);

Mat imgGamma(img.size(), CV_32FC3);

for (int i = 0; i < img.rows; i++)

{

for (int j = 0; j < img.cols; j++)

{

imgGamma.at<Vec3f>(i, j)[0] = (img.at<Vec3b>(i, j)[0])*(img.at<Vec3b>(i, j)[0])*(img.at<Vec3b>(i, j)[0]);

imgGamma.at<Vec3f>(i, j)[1] = (img.at<Vec3b>(i, j)[1])*(img.at<Vec3b>(i, j)[1])*(img.at<Vec3b>(i, j)[1]);

imgGamma.at<Vec3f>(i, j)[2] = (img.at<Vec3b>(i, j)[2])* (img.at<Vec3b>(i, j)[2])* (img.at<Vec3b>(i, j)[2]);

}

}

//归一化

normalize(imgGamma, imgGamma, 0, 255, CV_MINMAX);

//转换为8 bit图像显示

convertScaleAbs(imgGamma, imgGamma);

imshow("伽马增强效果", imgGamma);

}

OpenCV直方图图像增强处理应用实践

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢