OpenCV图像增强之图像反转 C++
图像增强:增强处理是对图像进行加工,使其经过对于特定的应用比原始图形更适合的一种处理。
特定一词是指面向特定问题的。例如,对于增强X射线图像非常有用的方法,可能并不是适用于增强红外线。
图像增强是视觉上最具吸引力的图像处理领域之一;
图像增强常用三类基本函数:
线性函数(反转和恒等变换)、对数函数(对数和反对数变换)、幂律函数(n次幂和n次根变换)
图像反转用于增强嵌入在一幅图像的暗区域中的白色或灰色细节。特别是当黑色面积在尺寸上占主导地位时。
对数变换
下图是基本灰度变换函数:
图像反转表示为: s = L -1 -r
代码实现:
timer.h
#ifndef TIMER_H
#define TIMER_H
#include <iostream>
#include <chrono>
class Timer {
public:
Timer() : t1(res::zero()) , t2(res::zero()) {
tic();
}
~Timer() {}
void tic() { t1 = clock::now(); }
void toc(const char* str) {
t2 = clock::now();
std::cout << str << " time: " << std::chrono::duration_cast<res>(t2 - t1).count() / 1e3 <<
"ms." << std::endl;
}
private:
typedef std::chrono::high_resolution_clock clock;
typedef std::chrono::microseconds res;
clock::time_point t1;
clock::time_point t2;
};
#endif // TIMER_H
// main.cpp
#include <iostream>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "timer.h"
/*
* 线性函数中的图像取反,灰度级范围[0,L-1];取反s=L-1-r
* Opencv 实现
*/
int main()
{
cv::Mat image = cv::imread("xral.tif");
if (image.empty()) {
std::cout << "Couldn't open file." << std::endl;
return -1;
}
cv::imshow("image", image);
Timer timer;
timer.tic();
cv::Mat temp = cv::Scalar(255, 255, 255) - image;
timer.toc("single ");
cv::imshow("qufan1", temp);
timer.tic();
cv::Mat temp2 = ~image;
timer.toc("operator~");
cv::imshow("qufan2", temp2);
cv::waitKey();
return 0;
}
处理结果显示: