every blog every motto: You can do more than you think.
https://blog.csdn.net/weixin_39190382?type=blog
0. 前言
灰度变换、对数变换、伽马变换
1. 灰度变换
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img,out_img,img_gray;
img = imread("/home/v/home.png");
if (img.empty()){
cout << "Could not open or find the image" << endl;
return -1;
}
cvtColor(img, img_gray, COLOR_BGR2GRAY);
imshow("img gray",img_gray);
out_img = img_gray.clone();
for (int i=0;i<img_gray.rows;i++){
for (int j=0;j<img_gray.cols;j++){
// 灰度翻转
out_img.at<uchar>(i,j) = 255 - img_gray.at<uchar>(i,j);
}
}
imshow("灰度翻转",out_img);
waitKey(0);
return 0;
}
2. 对数变换
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img,out_img,img_gray;
img = imread("/home/v/home.png");
if (img.empty()){
cout << "Could not open or find the image" << endl;
return -1;
}
cvtColor(img, img_gray, COLOR_BGR2GRAY);
imshow("img gray",img_gray);
out_img = img_gray.clone();
for (int i=0;i<img_gray.rows;i++){
for (int j=0;j<img_gray.cols;j++){
// 对数变换6*log(r+1) 伽马变换
out_img.at<uchar>(i,j) = 6*log((double)(img_gray.at<uchar>(i,j)) + 1);
}
}
normalize(out_img,out_img,0,255,NORM_MINMAX); // 图像归一化
convertScaleAbs(out_img,out_img); // 数据类型转换到CV_8U
imshow("对数变换",out_img);
waitKey(0);
return 0;
}
3. 伽马变换
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img,out_img,img_gray;
img = imread("/home/v/home.png");
if (img.empty()){
cout << "Could not open or find the image" << endl;
return -1;
}
cvtColor(img, img_gray, COLOR_BGR2GRAY);
imshow("img gray",img_gray);
out_img = img_gray.clone();
for (int i=0;i<img_gray.rows;i++){
for (int j=0;j<img_gray.cols;j++){
// 伽马变换6*r^0.5
out_img.at<uchar>(i,j) = 6*pow((double)(img_gray.at<uchar>(i,j)),0.5);
}
}
normalize(out_img,out_img,0,255,NORM_MINMAX); // 图像归一化
convertScaleAbs(out_img,out_img); // 数据类型转换到CV_8U
imshow("伽马变换",out_img);
waitKey(0);
return 0;
}