1、处理方法1:基于直方图均衡化进行图片增强处理,使图像的灰度更加均衡,适用于对比度较低的图像增强。主要步骤:1)读取图像2)将图像分割到3通道对象中3)针对每个通道进行直方图均衡化4)最后合并分割的3通道图像进行输出
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);}
3、处理方法2:基于拉普拉斯算子的图像增强处理,使用与低对比度、地色度的图片处理,使用中心为5的8邻域拉普拉斯算子与图像卷积可以锐化增强图像的处理。
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);}
5、处理方法3:基于Log对数变换的图像增强,适用于显示图片低灰度部分更多的细节。对数变换可以将图像的低灰度值部分扩展,显示出低灰度部分更多的内容,将其高灰度值部分压缩,减少高灰度部分的细节,从而达到增强图像滴灰度的图像处理。
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);}
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);}