zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    树上差分
    循环数组最大子段和(带限制的最大子段和,单调队列优化)
    sprintf函数的用法详解
    VBS基础篇
    VBS基础篇
    VBS基础篇
    VBS基础篇
    VBS基础篇
    Android随笔
    Android随笔
  • 原文地址:https://www.cnblogs.com/zuoyou151/p/9582811.html
Copyright © 2011-2022 走看看