赞
踩
一些核心模块:
OpenCV各版本的差异:
OpenCV2 带来全新的c++接口;通过CUDA和OpenCL实现GPU加速
OpenCV3 进行项目架构改变,使用内核+插件的架构方式;大部分方法都使用了OpenCL加速
OpenCV4 c++11编译器才能编译
OpenCL:
OpenCL是一个为异构平台编写程序的框架。编写语言基于c99。用于并行计算,加速计算。
openCV中集成了OpenCL
OpenCL和CUDA比较:
不同点:
OpenCL是通用的异构平台编程语言,为了兼顾不同设备,使用繁琐。
CUDA是nvidia公司发明的专门在其GPGPU上的编程的框架,使用简单,好入门
相同点:
都是基于任务并行与数据并行。
OpenGL是什么,为什么存在与OpenCV中
一个跨编程语言、跨平台的应用程序接口(API)的规格,它用于生成二维、三维图像。
在 2.3 之前 OpenCV 的渲染部分都是由 CPU 来实现的,不论是画线还是把图片显示到屏幕上。这有两个问题,速度慢,同时没法画> 三维物体。引入 OpenGL 是为了借助 显卡的力量,显卡比 CPU 更擅长渲染,同时显卡和 CPU 可以同时干活
函数名称 | 用途 |
---|---|
imread | 读取文件 |
imshow | 显示图片 |
namedWindow | 用于创建一个窗口 |
imwrite | 输出文件 |
createTrackbar | 创建一个可以调整数值的轨迹条 |
getTrackbarPos | 获取轨迹条的当前位置 |
SetMouseCallback | 为指定的窗口设置鼠标回调 |
Mat不但是一个非常有用的图像容器类,同时也是一个通用的矩阵类,可以用来创建和操作多维矩阵。
定义 | 释义 |
---|---|
Point | 2维点, 支持int , Point_ Point2i Point 等价 |
Point2f | 2维点 , 支持float |
Point3f | 3维点 |
Scalar | 颜色RGB |
Size | 颜色RGB, typedef Size_ Size2i;typedef Size2i Size |
Rect | 矩形 |
cvtColor | 颜色空间转换 |
Matx | 轻量级Mat,使用前规定好大小 |
Vec | Matx的派生类,是一个以为的Matx,和vector很相似 |
OpenCV图片通道的存储顺序时BGR,而不是RGB.
line
函数ellipse
函数rectangle
函数circle
函数fillPoly
函数单通道的像素值只有256个,但是三通道有256*256*256种,处理起来比较麻烦,进行缩减后图像会有一样的效果。
像素缩减的办法是:
I
n
e
w
=
(
i
o
l
d
/
10
)
∗
10
I_{new}=(i_{old}/10)* 10
Inew=(iold/10)∗10
乘除法运算代价高,加减法及赋值运算代价低。
可以把所有的像素对应关系存表,利用查表后复制的方式替代上述计算公式,以减小运算代价
double time0=static_cast<double>(getTickCount());//记录起始时间
//进行图像处理操作
time0=((double)getTickCount() - time0) / getTickFrequency();
cout<<"此方法的运行时间为:“<<time0<<"秒”<<endl;
方法一 指针访问
方法二 迭代器
方法三 动态地址计算
定义ROI有两种方法:
进行画面叠加理论公式:
g
(
x
)
=
(
1
−
α
)
f
0
(
x
)
+
α
f
1
(
x
)
g(x)=(1-\alpha )f_0(x)+\alpha f_1(x)
g(x)=(1−α)f0(x)+αf1(x)
有时需要对BGR三个通道分别显示和调整。通过OpenCV的split和merge方法可以达到目的。
理论依据公式:
g
(
x
)
=
a
∗
f
(
x
)
+
b
g(x)=a*f(x)+b
g(x)=a∗f(x)+b
对一张图像使用傅里叶变换就是将它分解成正弦和余弦两部分,也就是将图像从空间域转换到频域。
一些关键函数:
函数名称 | 作用 |
---|---|
dft | 进行傅里叶变换 |
getOptimalDFTSize | 返回DFT最有尺寸 |
copyMakeBorder | 扩充图像边界 |
magnitude | 计算二维矢量的幅值 |
log | 计算自然对数 |
normalize | 矩阵归一化 |
此部分理解需要一些理论基础,待学习《数字信号处理》中相关内容再来细致学习吧~
使用FileStorage类进行文件xml和yaml文件操作
滤波方式 | 函数 |
---|---|
方框滤波 | BoxBlur函数 |
均值滤波 | Blur函数 |
高斯滤波 | GaussianBlur函数 |
中值滤波 | medisnBlur函数 |
双边滤波 | bilateralFilter函数 |
名称 | 作用 |
---|---|
低通滤波器 | 允许低频率通过 |
高通滤波器 | 允许高频率通过 |
带通滤波器 | 允许一定范围频率通过 |
带阻滤波器 | 允许一定范围频率通过并且允许其他频率通过 |
全通滤波器 | 允许所有频率通过,仅仅改变相位关系 |
陷波滤波器 | 阻止一个狭窄频率范围通过 |
两者的区别: 滤波可以分为低通滤波和高通滤波,低通就是模糊,高通就是锐化。
滤波方式 | 函数 |
---|---|
中值滤波 | medianBlur |
双边滤波 | bilateralFilter |
主要功能:
膨胀(dilate) 就是求局部最大值的操作。
腐蚀(erode) 就是求局部最小值的操作。
API函数:
操作类型 | 函数 |
---|---|
膨胀 | dilate |
腐蚀 | erade |
变换常见的例子就是傅里叶变换。这类操作的结果仍然保存为OpenCV图像结构的形式,但是新图像的每个单独像素表示原始图像的频谱分量,而不是通常考虑的空间分量。
边缘检测对应API
检测方法 | API |
---|---|
Canny边缘检测 | Canny |
Soble算子 | Sobel |
scharr滤波器 | Scharr |
OpenCV中的霍夫线变换有如下三种:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。