openCV学习日志(二)
来源:互联网 发布:淘宝店铺交易额查询 编辑:程序博客网 时间:2024/05/19 19:14
好迷。。选中了开放评论,审核后还是显示禁止评论。。
本篇是在学习【OpenCV入门教程之六】 创建Trackbar & 图像对比度、亮度值调整一文时的总结所得,希望对读者有所帮助。
一、回调函数 static void on_trackbar(int, void*)
根据createTrackbar函数的要求,它的回调函数的形式必须为void XXX(int, void*),在源程序中,我们将回调函数定义为static(静态函数)类型,有如下几点好处。
1.静态函数只能在声明它的文件中调用,避免了被其他文件误调用。
2.其他文件可以声明相同名字的函数,不会发生冲突。
3.静态函数有相应的存储区,避免压栈出栈,提高了代码的运行速度。
二、回调函数 static void ContrastAndBright(int, void *)
static void ContrastAndBright(int, void *) { //创建窗口 namedWindow("【原始图窗口】", 1); //三个for循环,执行运算 g_dstImage(i,j) =a*g_srcImage(i,j) + b for(int y = 0; y < g_srcImage.rows; y++ ) { for(int x = 0; x < g_srcImage.cols; x++ ) { for(int c = 0; c < 3; c++ ) { g_dstImage.at<Vec3b>(y,x)[c]= saturate_cast<uchar>( (g_nContrastValue*0.01)*(g_srcImage.at<Vec3b>(y,x)[c] ) + g_nBrightValue ); } } } //显示图像 imshow("【原始图窗口】", g_srcImage); imshow("【效果图窗口】", g_dstImage); }
对于彩色图像,Image.at<Vec3b>(i,j)[c]可以获取图像在i行j列处的像素在c通道(c=0,G通道;c=1,B通道,c=2,R通道)上的值。
对于灰度图,Image.at<uchar>(i,j)可以获取图像在i行j列处的像素的灰度值。
注:uchar数据类型在存储整数时可以保存[0,255]的值。
saturate_cast函数是图像处理中非常常见的数据溢出保护函数,saturate_cast<uchar>(x)的含义为
if(x<0) x=0; else if(x>255) x=255;
根据官方文档
创建全零图像:C++: static MatExpr Mat::zeros(int rows, int cols, int type)
C++: static MatExpr Mat::zeros(Size size, int type)
C++: static MatExpr Mat::zeros(int ndims, const int* sz, int type)
三、图像对比度、亮度值调整示例程序分析
调节图像的对比度和亮度,需要对图像上各点的像素值进行线性变换g,由于处理的图像为彩色图像,则问题转换为对图像上各点的RGB三个通道上的值分别做线性变换g再进行叠加。因此,一共需要3层for循环,2层用于锁定图片上一点的位置(i,j),1层用于确定当前像素的RGB通道。
我们创建了对比度和亮度两个进度条,一般而言,也应该需要两个回调函数,在这里,作者为了简洁代码,将两个回调函数归一到一个函数中。注意到轨迹条创建函数中的&引用和回调函数static void ContrastAndBright(int, void *)中的参数名,我们可以推断出相应的实现机制。
- openCV学习日志(二)
- openCV学习日志(一)
- 学习OpenCV(二)
- 学习OpenCV(二)
- OpenCV学习笔记(二)
- OpenCv学习笔记(二)
- opencv学习笔记(二)
- opencv学习笔记(二)
- OpenCV学习笔记(二)
- opencv学习笔记(二)
- 学习opencv记录(二)
- opencv 学习笔记(二)
- OpenCV学习笔记(二)
- JBPM学习日志(二)
- Java学习日志(二)
- java学习日志(二)
- 代理服务器学习日志(二)
- Docker 学习日志 (二)
- POJ1703 Find them, Catch them (分类并查集)
- [学习笔记]关于在MVC上实现Devexpress组件
- 网络状态判断简单的判断没有网络可以跳转到设置
- Git学习笔记 chapter03--工作区、暂存区
- extern C
- openCV学习日志(二)
- Jquery导出带样式的Excel
- Android wpa_cli 调试方法
- 编程出现的问题
- pycharm 对mysql的可视化操作
- STL之空间配置器
- AVPlayer的用法
- 监控系统的一般架构之二串行数据流接口
- 二维码扫描