• OpenCV && C++ 04


    如果你想提升一幅图像的亮度,可以给每个像素的值都加上一个正的常数

    [new\_image (i, j) = image(i, j) + c ]

    如果你想降低一幅图像的亮度,可以给每个像素的值都减去一个正的常数

    [new\_image (i, j) = image(i, j) - c ]

    Code

    /*
    作者:郑大峰
    时间:2019年09月20日
    环境:OpenCV 4.1.1 + VS2017
    内容:Change Brightness
    */
    
    #include "pch.h"
    #include <iostream>
    #include <opencv2/opencv.hpp>
    
    using namespace std;
    using namespace cv;
    
    int main()
    {
    	Mat image = imread("claudia.png");
    
    	if (image.empty())
    	{
    		cout << "Could not open or find the image" << endl;
    		cin.get();
    		return -1;
    	}
    
    	Mat imageBrighnessHigh50;
    	image.convertTo(imageBrighnessHigh50, -1, 1, 50); //increase the brightness by 50
    
    	Mat imageBrighnessHigh100;
    	image.convertTo(imageBrighnessHigh100, -1, 1, 100); //increase the brightness by 100
    
    	Mat imageBrighnessLow50;
    	image.convertTo(imageBrighnessLow50, -1, 1, -50); //decrease the brightness by 50
    
    	Mat imageBrighnessLow100;
    	image.convertTo(imageBrighnessLow100, -1, 1, -100); //decrease the brightness by 100
    
    	//Defining window names for above images
    	String windowNameOriginalImage = "Original Image";
    	String windowNameBrightnessHigh50 = "Brightness Increased by 50";
    	String windowNameWithBrightnessHigh100 = "Brightness Increased by 100";
    	String windowNameBrightnessLow50 = "Brightness Decreased by 50";
    	String windowNameBrightnessLow100 = "Brightness Decreased by 100";
    
    	//Create and open windows for above images
    	namedWindow(windowNameOriginalImage, WINDOW_NORMAL);
    	namedWindow(windowNameBrightnessHigh50, WINDOW_NORMAL);
    	namedWindow(windowNameWithBrightnessHigh100, WINDOW_NORMAL);
    	namedWindow(windowNameBrightnessLow50, WINDOW_NORMAL);
    	namedWindow(windowNameBrightnessLow100, WINDOW_NORMAL);
    
    	//Show above images inside the created windows.
    	imshow(windowNameOriginalImage, image);
    	imshow(windowNameBrightnessHigh50, imageBrighnessHigh50);
    	imshow(windowNameWithBrightnessHigh100, imageBrighnessHigh100);
    	imshow(windowNameBrightnessLow50, imageBrighnessLow50);
    	imshow(windowNameBrightnessLow100, imageBrighnessLow100);
    
    	waitKey(0); // Wait for any key stroke
    
    	destroyAllWindows(); //destroy all open windows
    
    	return 0;
    }
    

    Result

    Explanation

    void Mat::convertTo( OutputArray m, int rtype, double alpha=1, double beta=0 ) const

    This function converts the each pixel value to the target data type and changes the value as per the following formula. pixel_value_of_output_image(x, y) = pixel_value_of_input_image(x, y) * alpha + beta;

    1. m - Output image. This data structure will be reallocated if required.
    2. rtype - Type of the output image. If rtype is a negative value, the type of the output image will be same as the input image.
    3. alpha - Each pixels in the input image will be multiplied by this number before assigning to the output image.
    4. beta - This value will be added to each pixels in the input image and assigned to the output image.
  • 相关阅读:
    JavaWeb学习笔记--2.3内置对象
    JavaWeb学习笔记--2.jsp指令元素、动作元素、内置对象
    JavaWeb学习笔记--Servlet代码集
    JavaWeb学习笔记--HttpServletRequest、HttpServletResponse对象常用方法
    JavaWeb学习笔记-使用HttpSession对象跟踪会话
    Servlet接收JSP参数乱码问题解决办法
    Java笔记--File,FileInputStream,FileReader,InputStreamReader,BufferedReader 的使用和区别
    Java笔记--java一行一行写入或读取数据
    Java笔记--Java的List、Iterator用法
    Scala学习笔记--List、ListBuffer
  • 原文地址:https://www.cnblogs.com/zdfffg/p/11558123.html
Copyright © 2020-2023  润新知