OpenCV中saturate_cast模板函数的使用
背景
对图像进行点操作,来改变图像的亮度和对比度,原理如下图所示:
这里就出现了一个隐患,我们知道像素值的取值范围为(0,255),但按照上面的公式运算结果会超出取值范围,还有可能是非整数,所以需要用到saturate_cast模板函数,该函数的原理如下:
if(data<0)
data=0;
else if(data>255)
data=255;
有了saturate_cast函数后,便可对图像的亮度、对比度进行操作了。
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);}}}
附上源码
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
using namespace cv;
using namespace std;static void on_ContrastAndBright(int, void*);
static void ShowHelpText();
int g_nContrastValue;
int g_nBrightValue;
Mat g_srcImage, g_dstImage;int main(){g_srcImage = imread("13.jpg");if (!g_srcImage.data){cout << "读取图片出错!" << endl;return false;}g_dstImage = Mat::zeros(g_srcImage.size(), g_srcImage.type());g_nContrastValue = 80;g_nBrightValue = 80; //设置对比度和亮度的初值namedWindow("【效果图窗口】", 1);createTrackbar("对比度:", "【效果图窗口】", &g_nContrastValue, 300, on_ContrastAndBright);createTrackbar("亮 度:", "【效果图窗口】", &g_nBrightValue, 200, on_ContrastAndBright);on_ContrastAndBright(g_nContrastValue, 0);on_ContrastAndBright(g_nBrightValue, 0); //对回调函数进行初始化while (char(waitKey(1)) != 'q'){}return 0;
}
static void on_ContrastAndBright(int, void*){namedWindow("【原始窗口】", 1);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);
}
OpenCV中saturate_cast模板函数的使用相关推荐
- 【OpenCV】OpenCV中积分图函数与应用
OpenCV中积分图函数与应用 参考资料 opencv 查找integral,目前网上大部分的资料来自于opencv https://docs.opencv.org/master/d7/d1b/gro ...
- OpenCV中使用模板匹配识别空闲的货架空间
但是点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 假设你是一名在超市工作的员工,被要求在商店里四处走动,检查需要 ...
- OpenCV中的模板匹配
OpenCV中的模板匹配 在该demo中选取了两张猴哥的照片,一张用来获得模板,另外一张用模板去匹配. 下图为选取模板的图像: 以下为选取的匹配模板: 根据该模板在下面的图中找到猴哥的脸: 该demo ...
- opencv中的copyTo函数在opencv-Python中的实现
Opencv中的copyTo()函数在opencv-Python中的实现 copyTo() 函数有两种方式 第一种:src_Image.copyTo(dst_Image),表示将原图复制到目标图中. ...
- opencv中伪彩色applyColorMap函数(C++ / Python)
opencv中伪彩色applyColorMap函数(C++ / Python) 翻译 2017年06月23日 15:34:12 标签: 1654
- opencv中的approxPolyDP函数和boundingRect函数
opencv中的approxPolyDP函数和boundingRect函数说明 cv2.boundingRect 举例: import numpy as npimage=cv2.imread(&quo ...
- 使用opencv中的merge()函数为BGR图像添加alpha通道
先上代码: #!/usr/bin/env python # -*- coding: utf-8 -*- # 图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 # 图像处理 ...
- C语言中比较大小的函数模板,C语言中实现模板函数小结 : 不敢流泪
--by boluor 2009/5/20 如果要写个函数支持多种数据类型,首先想到的就是C++的模板了,但是有时候只能用C语言,比如在linux内核开发中,为了减少代码量,或者是某面试官的要求- 考 ...
- 解决opencv中cv2.VideoCapture()函数打开USB视频慢的问题
解决opencv中cv2.VideoCapture()函数打开USB视频慢的问题!!! cv2.VideoCapture(0)打开电脑自带摄像头比cv2.VideoCapture(1)打开usb慢好多 ...
最新文章
- Kotlin基本语法和使用
- Android模拟器环境下SD卡内容的管理[转]
- Atitit 关于处理环保行动联盟和动物解放阵线游击队的任命书 委任状
- Codeforces Round #708 (Div. 2)
- delphi--csv,txt文本转换成excel .
- Oracle客户端工具安装(PL/SQL Developer 和 instantclient)
- CUDA10,Torch安装解决NOTFOUND CUDA_cublas_device_LIBRARY,Ubuntu16.04安装torch遇到的错误
- 现场总线->无线网络的技术->泛在网络
- ARM指令集 mov指令,ldr=伪指令,地址访问指令ldr,str,位运算指令and,orr,eor,bic,逻辑位移指令lsl,lsr
- linux解决笔记本pwm背光,担心PWM调光屏幕闪瞎眼?联想这些ThinkPad笔记本要注意...
- JuliaFEM中的数据格式——fields.jl
- 20个基于DPDK开源项目,建议收藏
- FS2222可调过压过流芯片IC,40V耐压过压保护可调OVP可调OCP
- 深度估计 DenseDepth 笔记
- Bayesian Convolution Neural Networks with Bernoulli Approximate Variational Inference
- vim 显示和隐藏行号
- Ripro子主题Eeesucai-child集成后台美化包源码QIW
- NeurIPS 2022|UIUC联合哥伦比亚大学提出VidIL模型,通吃小样本视觉语言任务
- mmdetection解决 ImportError: cannot import name ‘deform_conv_cuda’
- 记录React之富文本编辑器