06 OpenCV增加图像的对比度

news/2024/7/7 21:20:39

文章目录

  • 理论
  • API
  • 代码

理论

图像变换可以看作如下:

  • 像素变换 – 点操作
  • 邻域操作 – 区域
    调整图像亮度和对比度属于像素变换-点操作
    在这里插入图片描述

API

  • saturate_cast(value)确保值大小范围为0~255之间
  • Mat.at(y,x)[index]=value 给每个像素点每个通道赋值

代码

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
int main(int argc, char** argv) {
	Mat src, dst;
	src = imread("test.png");
	if (!src.data) {
		printf("could not load image...\n");
		return -1;
	}
	char input_win[] = "input image";
	cvtColor(src, src, CV_BGR2GRAY);
	namedWindow(input_win);
	imshow(input_win, src);

	// contrast and brigthtness changes 
	int height = src.rows;
	int width = src.cols;
	dst = Mat::zeros(src.size(), src.type());
	float alpha = 1.2;
	float beta = 30;

	Mat m1;
	src.convertTo(m1, CV_32F);
	for (int row = 0; row < height; row++) {
		for (int col = 0; col < width; col++) {
			if (src.channels() == 3) {
				float b = m1.at<Vec3f>(row, col)[0];// blue
				float g = m1.at<Vec3f>(row, col)[1]; // green
				float r = m1.at<Vec3f>(row, col)[2]; // red

				// output
				dst.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(b*alpha + beta);
				dst.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(g*alpha + beta);
				dst.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(r*alpha + beta);
			}
			else if (src.channels() == 1) {
				float v = src.at<uchar>(row, col);
				dst.at<uchar>(row, col) = saturate_cast<uchar>(v*alpha + beta);
			}
		}
	}

	char output_title[] = "contrast and brightness change demo";
	namedWindow(output_title);
	imshow(output_title, dst);

	waitKey(0);
	return 0;
}

http://lihuaxi.xjx100.cn/news/2063042.html

相关文章

2024免费mac苹果电脑的清理和维护软件CleanMyMac X

对于 Mac 用户来说&#xff0c;电脑的清理和维护是一件让人头疼的事情。但是&#xff0c;有了 CleanMyMac X&#xff0c;这一切都将变得轻松愉快。CleanMyMac X 是一款专为 Mac 设计的电脑清理软件&#xff0c;它以其强大的功能和简单的操作&#xff0c;让无数用户为之倾倒。 C…

【未完结】nginx+hexo搭建个人网站真实体验!

自从之前学习Vue和SSM的时候写了个博客项目之后&#xff0c;就特别想做一个自己的博客网站。可能是出于拖延心理以及各种任务安排时间繁忙&#xff0c;一直没有抽时间去弄。博客笔记基本上都是直接使用csdn写的&#xff0c;除此之外&#xff0c;还经常在这些网站上写笔记&#…

蓝桥OJ 2942数字王国之军训排队 DFS剪枝

蓝桥OJ 2942数字王国之军训排队 #include<bits/stdc.h> using namespace std;const int N 15;//最多10队 int a[N], n; vector<int>v[N];//二维数组 v[i]记录队伍i中所有人的编号bool dfs(int cnt, int dep) {if (dep n1){//判断合法性for (int i 1; i < n; …

未来技术发展与情绪消除的可能性——探索人工智能对情绪调控的新路径

随着科技的飞速进步&#xff0c;特别是人工智能(AI)和神经科学领域的突破&#xff0c;关于是否存在一种未来机器能够消除人类情绪的问题引发了广泛的社会讨论与伦理思考。本文旨在探讨这一设想的可能性、潜在影响以及相关伦理挑战。 首先&#xff0c;从技术角度看&#xff0c;科…

5.40 BCC工具之ustat.py解读

一,工具简介 ustat是一个类似于“top”的工具,用于监控高级语言中的事件。它为每个使用Java、Node、Perl、PHP、Python、Ruby和Tcl运行时的进程打印关于垃圾收集、方法调用、对象分配以及各种其他事件的统计信息。 二,代码示例 #!/usr/bin/pythonfrom __future__ import …

腾讯云幻兽帕鲁游戏存档迁移教程,本地单人房迁移/四人世界怎么迁移存档?

腾讯云幻兽帕鲁游戏存档迁移的方法主要包括以下几个步骤&#xff1a; 登录轻量云控制台&#xff1a;首先&#xff0c;需要登录到轻量云控制台&#xff0c;这是进行存档迁移的前提条件。在轻量云控制台中&#xff0c;可以找到接收存档的服务器卡片&#xff0c;并点击进入实例详情…

简单了解GaussDB

大家都已经很熟悉openGauss了&#xff0c;昨天我的文章中说陕西电力的用采系统用Gaussdb替代了Oracle&#xff0c;就有朋友问我这个Gaussdb是不是就是openGauss。这个问题还真的有点不好回答&#xff0c;Gaussdb和openGauss渊源很近&#xff0c;但是还不是一码事。华为在数据库…

【高级数据结构】Trie树

原理 介绍 高效地存储和查询字符串的数据结构。所以其重点在于&#xff1a;存储、查询两个操作。 存储操作 示例和图片来自&#xff1a;https://blog.csdn.net/qq_42024195/article/details/88364485 假设有这么几个字符串&#xff1a;b&#xff0c;abc&#xff0c;abd&…