opencv 彩色图像亮度、对比度调节 直方图均衡化
2014-03-14 14:57
351 查看
直接上代码:
参考网址:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/core/basic_linear_transform/basic_linear_transform.html
#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 = 640; int m_nHeight = 480; double alpha = 2.0; /**< Simple contrast control */ int beta = 0; /**< 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(0); 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 -1;} m_Cap>>m_frame; if (m_frame.empty()) { return -1; } //用来存储各通道图片的向量 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 -1; } //方法一:直方图均衡化 //分割通道,存储到splitBGR中 split(m_frame,splitBGR); //对各个通道分别进行直方图均衡化 for(int i=0; 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[0],splitYCrCb[0]); merge(splitYCrCb,m_ycrcb); cvtColor(m_ycrcb,m_result2,CV_YCrCb2BGR); //方法三: //g(i,j) = alpha * f(i,j) + beta for( int y = 0; y < m_frame.rows; y++ ) { for( int x = 0; x < m_frame.cols; x++ ) { for( int c = 0; c < 3; 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(33); if (c==27)//ESC退出 { break; } } return 0; }
参考网址:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/core/basic_linear_transform/basic_linear_transform.html
相关文章推荐
- OpenCV图像亮度、对比度调节
- opencv学习笔记-图像对比度、亮度调节
- OpenCV学习——图像亮度、对比度调节
- 调节亮度、对比度及gamma值实现彩色图像的亮度变换
- OpenCv基础(二):图像的亮度和对比度属性的调节
- OpenCV图像亮度、对比度调节
- opencv图像的对比度、亮度调节
- 【OpenCV学习】图像亮度、对比度调节(伽马校正)
- 学习opencv 一幅图像的对比度和亮度调节
- opencv-改变图像的对比度和亮度
- opencv c++函数 基础5 改变图像的对比度和亮度
- OPenCV3.2 调整图像对比度与亮度
- 基于OpenCV调整图像的对比度和亮度
- 如何通过调节gamma曲线以调节图像的对比度,亮度等参数
- 【OpenCV学习笔记】十二、图像的对比度和亮度调整及图像通道的分离与合并
- 彩色图像的直方图均衡化--基于OpenCV中EqualizeHist_Demo实现
- [转]【OpenCV入门教程之六】 创建Trackbar & 图像对比度、亮度值调整
- opencv:图像对比度、亮度值调整(理论基础)
- opencv调节图片亮度对比度
- OpenCV入门(二十)-- 彩色图像的直方图均衡化