• 1.5 改变图像的对比度和亮度


    图像处理

        点算子:对每个像素的操作不依赖它的邻域像素。

        邻域算子:对每个像素的输出值依赖于其邻域像素。

    像素变换

        在这一类图像处理变换中,仅仅根据输入像素值(有时可加上某些全局信息或参数),计算相应输出像素值。

        这类算子包括,亮度和对比度调整,以及颜色校正和变换。

    亮度和对比度调整

        两种常用的点算子,是用常数对点进行乘法和加法运算。

                    g( x )=a*f( x )+ b

        两个参数a>0,和b 一般称为增益和偏置参数,分别用来控制对比度和亮度。

        将f(x)看做源图像像素,将g(x)看做输出图像像素。

                  g( i, j )=a*f( i, j )+ b  

     saturate_cast(防止溢出)

        对像素进行加减乘除运算之后,结果为负,转化为0;结果大于255转化为255。

    #include<iostream>
    #include<opencv2/core/core.hpp>
    #include<opencv2/highgui/highgui.hpp>
    using namespace cv;
    using namespace std;
    int main() {
    	double alpha;
    	int beta;
    	Mat image = imread("D:\OpenCVT\2.jpg");
    	Mat new_image = Mat::zeros(image.size(), image.type());
    	//初始化
    	cin >> alpha;
    	cin >> beta;
    	//执行运算 new_image=alpha*image+beta
    	for (int y = 0; y < image.rows; y++) {
    		for (int x = 0; x < image.cols; x++) {
    			for (int c = 0; c < 3; c++) {
    				new_image.at<Vec3b>(y, x)[c] = saturate_cast<uchar>(alpha*(image.at<Vec3b>(y, x)[c]) + beta);
    			}
    		}
    	}
    	//创建窗口
    	namedWindow("Original Image", 1);
    	namedWindow("New Image", 1);
    
    	//显示图像
    	imshow("Original Image", image);
    	imshow("New Image", new_image);
    	waitKey();
    	return 0;
    }

     代码中for循环可直接用函数

    image.convertTo(new_image, -1, alpha, beta);
  • 相关阅读:
    论分治与归并思想
    关于缩短cin时间的方法
    【lower_bound、upperbound讲解、二分查找、最长上升子序列(LIS)模版】
    getDomain(url)-我的JavaScript函数库-mazey.js
    jQuery-PHP跨域请求数据
    ASP-Server.Transfer-Response.Redirect
    jQuery获取相邻标签的值
    分界线<hr/>
    jQuery获取input复选框的值
    Bootstrap支持的JavaScript插件
  • 原文地址:https://www.cnblogs.com/zuoyou151/p/9582811.html
Copyright © 2020-2023  润新知