图像增强(直方图均衡化、拉普拉斯、Log、Gamma)

来源:互联网 发布:javascript长度函数 编辑:程序博客网 时间:2024/06/05 07:08
#include <opencv2/imgproc/imgproc.hpp>    #include <opencv2/highgui/highgui.hpp>#include<opencv2/opencv.hpp>#include <iostream>using namespace cv;//OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)void hisitogramEhance(Mat& image);//基于直方图均衡化的图像增强void laplaceEhance(Mat& image);//基于拉普拉斯算子的图像增强void logEhance(Mat& image);//基于对数Log变换的图像增强void gamaEhance(Mat& image); //基于伽马变换的图像增强int main(int argc, char *argv[]){Mat image = imread("1.jpg", 1);if (image.empty()){std::cout << "打开图片失败,请检查" << std::endl;return -1;}imshow("原图像", image);int key = 0;while (1){key = waitKey(9);//读取键值到key变量中switch (key){case 27:return 0; break;case 'q':hisitogramEhance(image); break;case 'w':laplaceEhance(image); break;case 'e':logEhance(image);break;case 'r':gamaEhance(image); break;}}waitKey();return 0;}void hisitogramEhance(Mat& image){Mat imageRGB[3];split(image, imageRGB);for (int i = 0; i < 3; i++){equalizeHist(imageRGB[i], imageRGB[i]);}merge(imageRGB, 3, image);imshow("直方图均衡化图像增强效果", image);}void laplaceEhance(Mat& image){Mat imageEnhance;Mat kernel = (Mat_<float>(3, 3) << 0, -1, 0, 0, 5, 0, 0, -1, 0);filter2D(image, imageEnhance, CV_8UC3, kernel);imshow("拉普拉斯算子图像增强效果", imageEnhance);}void logEhance(Mat& image){Mat imageLog(image.size(), CV_32FC3);for (int i = 0; i < image.rows; i++){for (int j = 0; j < image.cols; j++){imageLog.at<Vec3f>(i, j)[0] = log(1 + image.at<Vec3b>(i, j)[0]);imageLog.at<Vec3f>(i, j)[1] = log(1 + image.at<Vec3b>(i, j)[1]);imageLog.at<Vec3f>(i, j)[2] = log(1 + image.at<Vec3b>(i, j)[2]);}}//归一化到0~255  normalize(imageLog, imageLog, 0, 255, CV_MINMAX);//转换成8bit图像显示  convertScaleAbs(imageLog, imageLog);//imshow("Soure", image);imshow("Log变换图像增强效果", imageLog);}void gamaEhance(Mat& image){Mat imageGamma(image.size(), CV_32FC3);for (int i = 0; i < image.rows; i++){for (int j = 0; j < image.cols; j++){imageGamma.at<Vec3f>(i, j)[0] = (image.at<Vec3b>(i, j)[0])*(image.at<Vec3b>(i, j)[0])*(image.at<Vec3b>(i, j)[0]);imageGamma.at<Vec3f>(i, j)[1] = (image.at<Vec3b>(i, j)[1])*(image.at<Vec3b>(i, j)[1])*(image.at<Vec3b>(i, j)[1]);imageGamma.at<Vec3f>(i, j)[2] = (image.at<Vec3b>(i, j)[2])*(image.at<Vec3b>(i, j)[2])*(image.at<Vec3b>(i, j)[2]);}}//归一化到0~255  normalize(imageGamma, imageGamma, 0, 255, CV_MINMAX);//转换成8bit图像显示  convertScaleAbs(imageGamma, imageGamma);imshow("伽马变换图像增强效果", imageGamma);}

阅读全文
0 0
原创粉丝点击