数字图像处理7--图像增强之图像反转,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;
}
 

处理结果显示:

猜你喜欢

转载自blog.csdn.net/cyf15238622067/article/details/87710474