zoukankan      html  css  js  c++  java
  • OpenCV && C++ 05

    如果你想加强一幅图像的对比度,可以给每个像素的值都乘以一个大于1的常数

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

    其中 (c > 1)

    如果你想减弱一幅图像的对比度,可以给每个像素的值都乘以一个大于0且小于1的常数

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

    其中 (0 < c < 1)

    Code

    /*
    作者:郑大峰
    时间:2019年09月20日
    环境:OpenCV 4.1.1 + VS2017
    内容:Change Contrast
    */
    
    #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 imageContrastHigh2;
    	image.convertTo(imageContrastHigh2, -1, 2, 0); //increase the contrast by 2
    
    	Mat imageContrastHigh4;
    	image.convertTo(imageContrastHigh4, -1, 4, 0); //increase the contrast by 4
    
    	Mat imageContrastLow0_5;
    	image.convertTo(imageContrastLow0_5, -1, 0.5, 0); //decrease the contrast by 0.5
    
    	Mat imageContrastLow0_25;
    	image.convertTo(imageContrastLow0_25, -1, 0.25, 0); //decrease the contrast by 0.25
    
    
    	//Defining window names for above images
    	String windowNameOriginalImage = "Original Image";
    	String windowNameContrastHigh2 = "Contrast Increased by 2";
    	String windowNameContrastHigh4 = "Contrast Increased by 4";
    	String windowNameContrastLow0_5 = "Contrast Decreased by 0.5";
    	String windowNameContrastLow0_25 = "Contrast Decreased by 0.25";
    
    	//Create and open windows for above images
    	namedWindow(windowNameOriginalImage, WINDOW_NORMAL);
    	namedWindow(windowNameContrastHigh2, WINDOW_NORMAL);
    	namedWindow(windowNameContrastHigh4, WINDOW_NORMAL);
    	namedWindow(windowNameContrastLow0_5, WINDOW_NORMAL);
    	namedWindow(windowNameContrastLow0_25, WINDOW_NORMAL);
    
    	//Show above images inside the created windows.
    	imshow(windowNameOriginalImage, image);
    	imshow(windowNameContrastHigh2, imageContrastHigh2);
    	imshow(windowNameContrastHigh4, imageContrastHigh4);
    	imshow(windowNameContrastLow0_5, imageContrastLow0_5);
    	imshow(windowNameContrastLow0_25, imageContrastLow0_25);
    
    	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.
  • 相关阅读:
    4种常见的缓存问题及解决方案详解
    如果你不了解Java的JVM,那真的很难进BAT一线大厂!
    终于有人把分布式事务说清楚了!
    这3个并发编程的核心,你一定要知道!
    Java垃圾回收机制你还不明白?一线大厂面试必问的!
    几种置换算法
    [ERR] Node 172.168.63.202:7001 is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some
    redis集群添加删除节点
    redis集群安装部署
    在Ubuntu下永久修改主机名
  • 原文地址:https://www.cnblogs.com/zdfffg/p/11558241.html
Copyright © 2011-2022 走看看