个人资料,仅供学习使用
学习课程:OpenCV4 C++ 快速入门视频30讲——贾志刚
05 图像像素的算术操作
opencv知识点:
- 图像像素算术操作 - 运算符
- 值的截断 - saturate_cast<>()
- 图像像素算术操作 - 专用函数
本课所解决的问题:
- 如何改变图像的亮度?
- 如何进行图像像素的算术操作?
- 如何对可能溢出的值进行截断?
1.改变图像亮度
对于改变图像的亮度,我们可以采用图像像素的算术操作实现
本文采用如下两种方法演示
- 四种运算运算符
- 四种专用函数
2.四种运算符和截断
运算符
首先,我们采用运算符的方式
//函数定义
void operators_demo(Mat& image);
//函数实现
void QuickDemo::operators_demo(Mat& image) {
Mat dst;
dst = image + Scalar(50, 50, 50);
//dst = image - Scalar(50, 50, 50);
//dst = image * Scalar(5, 5, 5);//会溢出
//dst = image / Scalar(5, 5, 5);//会截断为0
imshow("加法操作", dst);
}
加法:可能会溢出
减法: 会自动截断为0
乘法
可能会溢出,提示溢出的错误。
本案例就溢出了,所以没有结果展示
除法:如果除数较大,结果最终会被自动截断为0
截断函数
采用运算符时加法,乘法有溢出隐患,有什么办法解决吗?
这就用到了saturate_cast<uchar>
,当使用它时会保证BGR图像的像素值在[0,255]
对于截断的演示,我们用运算符加法演示
void QuickDemo::operators_demo