OpenCV之Core组件进阶
颜色空间缩减
利用 C++类型转换时向下取整操作,实现定义域内颜色缩减。表达式如下
Inew = (Iold/10)*10
简单的颜色空间缩减算法可由以下两步组成:
(1)遍历图像矩阵的每个元素
(2)对像应用上述公式
LUT 函数:Look up table 操作
上文提到的 Look up table 操作,OpenCV 官方文档中强烈推荐使用一个原型为 operationsOnArrays:LUT()的函数来进行。使用方法如下:
1 | //首先我们建立一个mat型用于查表 |
计时函数
- getTickCount()函数返回 CPU 自时间以来走过的时钟周期数
- getTickFrequency()函数返回 CPU 一秒钟所走的时钟周期数。
访问图像中像素的三类方法
- 指针访问:C 语言操作符[]; (最快)
- 迭代器 iterator; (最安全)
- 动态地址计算; (最直观)
示例程序如下
1 | #include<core.hpp> |
感兴趣区域:ROI
- 使用 Rect 指定区域
1 | //定义一个Mat类型并给其设定ROI区域 |
- 用 Range 来定义 ROI
Range 是指从起始索引到终止索引(不包括终止索引)的一连续序列。
1 | imageROI = image(Range(250, 250+logoImage.rows), Range(200, 200+logoImage.cols)); |
示例如下
1 |
|
线性混合操作与 addWeighted()函数
- 线性混合理论公式:g(x) = (1-a)fa(x)+ af3(x)
- addWeighted()函数
函数原型
1 | void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype = -1); |
参数
- InputArray 类型的 src1,表示需要加权的第一个数组,常常填一个 Mat;
- double 类型的 alpha,表示第一个数组的权重
- InputArray 类型的 src2,表示第二个数组,它需要和第一个数组拥有相同的尺寸和通道数
- double 类型的 beta,表示第一个数组的权重值;
- double 类型的 gamma,一个加到权重和上的标量值。
- OutputArray 类型的 dst,输出的数组,它和输入的两个数组拥有相同的尺寸和通道数
- int 类型的 dtype,输出阵列的可选深度,默认值-1。当两个输入数组具有相同的深度时,这个参数设置为-1(默认值),即等同于 src1.depth()。
addWeighted 函数作用矩阵的表达式
dst = src1[I]_alpha + src2[I]_beta + gamma;
示例如下
1 |
|
颜色通道的分离与混合
通道分离:split()函数
函数原型
1 | void split(const Mat& src, Mat* mvbegin); |
参数
- InputArray 类型的 m 或者 const Mat&类型的 src,填我们需要分离的多通道数组。
- OutputArrayOfArrays 类型的 mv,填函数的输出数组或者输出的 vector 容器
示例
1 | vector<Mat> channels; |
通道合并:merge()函数
函数原型
1 | void merge(const Mat* mv,size_tcount, OutputArray dst); |
参数
- 填需要被合并的输入矩阵或 vector 容器的阵列(数组),这个 mv 参数中所有的矩阵必须有着一样的尺寸和深度。
- 当 mv 为一个空白的 C 语言数组时,代表输入矩阵的个数,这个参数显然必须大于 1。
- dst 即输出矩阵,和 mv[0]具有一样的尺寸和深度,并且通道的数量是矩阵阵列中的通道的总数。
示例如下
1 |
|
图像对比度、亮度值调整
理论公式:g(i,j) = a*f(i,j) + b
其中
- 参数 f(x)表示源图像像素
- 参数 g(x)表示输出图像像素
- 参数 a(需要满足 a>0)被称为增益(gain),常常被用来控制图像的对比度。
- 参数 b 通常被称为偏置(bias),常常被用来控制图像的亮度。
示例如下
1 |
|
其中 saturate_cast 是对结果进行转换防止溢出,原理大致如下
1 | if (data < 0) |
本文作者 : HeoLis
原文链接 : https://ishero.net/OpenCV%E4%B9%8BCore%E7%BB%84%E4%BB%B6%E8%BF%9B%E9%98%B6.html
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
学习、记录、分享、获得