opencv 彩色图像亮度、对比度调节 直方图均衡化
直接上代码:
#include <Windows.h>
#include <iostream>// for stand I/O
#include <string> // for strings
#include <iomanip> // for controlling float print precision
#include <sstream> // string to number conversion
#include <cmath>
#include <ctype.h>
#include <opencv2/opencv.hpp> using namespace std;
using namespace cv; int main()
{
Mat m_frame;
Mat m_ycrcb;
Mat m_result;
Mat m_result2;
VideoCapture m_Cap;
int m_nWidth = ;
int m_nHeight = ; double alpha = 2.0; /**< Simple contrast control */
int beta = ; /**< Simple brightness control */
/// Initialize values
std::cout<<" Basic Linear Transforms "<<std::endl;
std::cout<<"-------------------------"<<std::endl;
std::cout<<"* Enter the alpha value [1.0-3.0]: ";std::cin>>alpha;
std::cout<<"* Enter the beta value [0-100]: "; std::cin>>beta; m_Cap.open(); bool bSuccess1 = false,bSuccess2 = false;
bSuccess1 = m_Cap.set(CV_CAP_PROP_FRAME_WIDTH,m_nWidth);
bSuccess2 = m_Cap.set(CV_CAP_PROP_FRAME_HEIGHT,m_nHeight);
if (bSuccess1==false || bSuccess2==false)
{ return -;} m_Cap>>m_frame;
if (m_frame.empty())
{
return -;
} //用来存储各通道图片的向量
vector<Mat> splitBGR(m_frame.channels());
vector<Mat> splitYCrCb(m_frame.channels()); Mat new_image = Mat::zeros( m_frame.size(), m_frame.type() ); for (;;)
{
m_Cap>>m_frame;
if (m_frame.empty())
{ return -; } //方法一:直方图均衡化
//分割通道,存储到splitBGR中
split(m_frame,splitBGR);
//对各个通道分别进行直方图均衡化
for(int i=; i<m_frame.channels(); i++)
equalizeHist(splitBGR[i],splitBGR[i]);
//合并通道
merge(splitBGR,m_result); //方法二: 直方图均衡化
//转化为ycrcb
cvtColor(m_frame,m_ycrcb,CV_BGR2YCrCb);
split(m_ycrcb,splitYCrCb);
equalizeHist(splitYCrCb[],splitYCrCb[]);
merge(splitYCrCb,m_ycrcb);
cvtColor(m_ycrcb,m_result2,CV_YCrCb2BGR); //方法三:
//g(i,j) = alpha * f(i,j) + beta
for( int y = ; y < m_frame.rows; y++ ) {
for( int x = ; x < m_frame.cols; x++ ) {
for( int c = ; c < ; c++ ) {
new_image.at<Vec3b>(y,x)[c] =
saturate_cast<uchar>( alpha*( m_frame.at<Vec3b>(y,x)[c] ) + beta );
}
}
} imshow("原图",m_frame);
imshow("对比度1",m_result);
imshow("对比度2",m_result2);
imshow("对比度3",new_image); int c = waitKey();
if (c==)//ESC退出
{ break; } } return ;
}
参考网址:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/core/basic_linear_transform/basic_linear_transform.html
opencv 彩色图像亮度、对比度调节 直方图均衡化的更多相关文章
- OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)
http://blog.csdn.net/dcrmg/article/details/53677739 1. 基于直方图均衡化的图像增强 直方图均衡化是通过调整图像的灰阶分布,使得在0~255灰阶 ...
- 【OpenCV】图像增强---灰度变换、直方图均衡化
图像增强的目的:改善图像的视觉效果或使图像更适合于人或机器的分析处理.通过图像增强,可以减少图像噪声,提高目标与背景的对比度,也可以增强或抑制图像中的某些细节. ------------------ ...
- 图像增强算法(直方图均衡化、拉普拉斯、Log、伽马变换)
一.图像增强算法原理 图像增强算法常见于对图像的亮度.对比度.饱和度.色调等进行调节,增加其清晰度,减少噪点等.图像增强往往经过多个算法的组合,完成上述功能,比如图像去燥等同于低通滤波器,增加清晰度则 ...
- 直方图均衡化的 C++ 实现(基于 openCV)
这是数字图像处理课的大作业,完成于 2013/06/17,需要调用 openCV 库,完整源码和报告如下: #include <cv.h> #include <highgui.h&g ...
- opencv —— equalizeHist 直方图均衡化实现对比度增强
直方图均匀化简介 从这张未经处理的灰度图可以看出,其灰度集中在非常小的一个范围内.这就导致了图片的强弱对比不强烈. 直方图均衡化的目的,就是把原始的直方图变换为在整个灰度范围(0~255)内均匀分布的 ...
- OpenCV计算机视觉学习(9)——图像直方图 & 直方图均衡化
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 1, ...
- OpenCV——直方图均衡化(用于图像增强)
#include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespac ...
- opencv图像直方图均衡化及其原理
直方图均衡化是什么有什么用 先说什么是直方图均衡化,通俗的说,以灰度图为例,原图的某一个像素为x,经过某个函数变为y.形成新的图.新的图的灰度值的分布是均匀的,这个过程就叫直方图均衡化. 图像直方图均 ...
- opencv 5 图像转换(3 重映射 仿射变换 直方图均衡化)
重映射 实现重映射(remap函数) 基础示例程序:基本重映射 //---------------------------------[头文件.命名空间包含部分]------------------- ...
随机推荐
- Effective C++学习笔记 条款05:了解C++默默编写并调用的哪些函数
一.如果用户没有提供构造函数.copy构造函数.copy assignment操作符和析构函数,当且仅当这些函数被需要的时候,编译器才会帮你创建出来.编译器生成的这些函数都是public且inline ...
- 用net匹配并替换iOS标准的emoji表情符号
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespaceCommo ...
- Java 解析 XML
Java 解析 XML 标签: Java基础 XML解析技术有两种 DOM SAX DOM方式 根据XML的层级结构在内存中分配一个树形结构,把XML的标签,属性和文本等元素都封装成树的节点对象 优点 ...
- UVa 10837 (欧拉函数 搜索) A Research Problem
发现自己搜索真的很弱,也许做题太少了吧.代码大部分是参考别人的,=_=|| 题意: 给出一个phi(n),求最小的n 分析: 回顾一下欧拉函数的公式:,注意这里的Pi是互不相同的素数,所以后面搜索的时 ...
- FileZilla无法确定拖放操作的目标,由于shell未正确安装
天有不测风云,突然间,用filezilla下载ftp上的文件到桌面的时候,提示"无法确定拖放操作目标.由于shell未正确安装" 解决办法很简单,执行如下几步就OK了 1.在CMD ...
- Android service binder aidl 关系
/********************************************************************************** * Android servic ...
- 最简单的视音频播放示例8:DirectSound播放PCM
本文记录DirectSound播放音频的技术.DirectSound是Windows下最常见的音频播放技术.目前大部分的音频播放应用都是通过DirectSound来播放的.本文记录一个使用Direct ...
- jQuery实战读书笔记(备忘录)
选择器备忘: | :even 匹配所有索引值为偶数的元素,从 0 开始计数 :odd 匹配所有索引值为奇数的元素,从 0 开始计数 实例——设置table交替行变色: <script type= ...
- <七>面向对象分析之UML核心元素之包
一:基本概念
- 【转】Android开发学习笔记:5大布局方式详解
Android中常用的5大布局方式有以下几种: 线性布局(LinearLayout):按照垂直或者水平方向布局的组件. 帧布局(FrameLayout):组件从屏幕左上方布局组件. 表格布局(Tabl ...