文章目录
- OpenCV介绍
-
- Mat类
-
- 创建
- 复制
- 遍历
- 基本概念
-
- 物理设备
- 相机光学模型
- 镜头畸变
- 采样和量化图像
- 图像分辨率
- 图像灰度级
- 图像的坐标
- 像素的空间关系
- 图像的种类
- 色彩模型
-
- CMYK 色彩模型
- HSV 色彩模型
- HSV 与 RGB的转换
- 图像直方图
- 直方图的作用
-
- 图像匹配
- 判断成像质量
- 二值化阈值
- 习题1
- 习题2
- 习题3
- 常用操作
- 二值化
-
- 连通域标记
- 图像二值化的目的
- P-tile法
- 最小误判概率法
- 大津法(OTSU)法
- 局部自适应二值化
- 习题1
- 习题2
- 习题3
- 习题4
- 图像形态学
-
- 绪论
- 膨胀运算
- 腐蚀运算
- 开运算
- 闭运算
- 换顶帽和底帽
- 灰度图的形态处理
- 习题1
- 习题2
- 习题3
- 空间滤波
-
- 图像卷积
- 均值滤波
- 中值滤波
- 边缘检测图像
-
- Prewitt算子
- Sobel算子
- Laplacian算子
- canny算子
- 习题1
- 习题2
- 习题3
- 习题4
- 图像变换
-
- 几何变换
- 平层变换
- 比例缩放
- 旋转和镜像
- 对称变换
- 错切变换
- 复合变换
- 仿射变换和投影变换
- 插值算法
-
- 最近邻插值法
- 双线插值法
- 双三次插值法
- 练习
- 图像特征
-
- 概论
-
- HSV直方图
- 形状特征
-
- Shape Context
- 霍夫变换
- 局部特征
-
- 角点检测
OpenCV介绍
OpenCV主页:https://opencv.org/
Mat类
matrix类本身是一种可以用来保存图像的矩阵格式
int main() { cout << "hello opencv!" << endl; Mat srcImage = imread("test.bmp"); imshow("srcImage", srcImage); ///窗名,图片名 waitKey(0); return 0; }
创建
Mat M1(2,2,CV_8UC3,Scalar(0,0,255); Mat M2(2,2,CV_8UC3,1); ///只给第一个通道赋值
创建了一个名字M1的Mat,尺寸为2,2,类型为8位uchar类型,通道数为3(此)mat每个元素包含三个通道(值),然后用0、0、255赋值每个元素
CV_(位数) (数据类型) (通道数)
Mat M3; M3.create(3,4,CV_8UC3);
声明了一个3行4列mat对象
复制
Mat srcM(2,2,CV_8UC3,Scalar(0,0,255)) Mat dstM; dstM = srcM;
新生成的矩阵头,的仍然指向矩阵的
Mat srcM(2,2,CV_8UC3,Scalar(0,0,255)) Mat dstM; srcM.copyTo(dstM);
内存中的位置和新矩阵srcM是不一样的
浅复制,修改后值也会随之变化,深度复制不会
遍历
//方法1 int height = image.rows; int width = image.cols * image.channels(); //列数乘以其通道数 for(int j = 0;j < height;j ) { uchar* data = image.ptr<uchar>(j); for(int i = 0;i < width;i ) { data[i] = data[i/2]; } }
//方法2 for (int j = 0; j < M7.rows; j ) { for (int i = 0; i < M7.rows; i ) { M7.at<Vec3b>(j, i)[0] = j; //取到(j,i)位置上的像素,然后赋值他 M7.at<Vec3b>(j, i)[1] = j 1; M7.at<Vec3b>(j, i)[2] = j 2; } }
基本概念
物理设备
数字图像处理系统包括:
(输入|采样量化|专用处理),(数字图像处理),
最常见的输入设备就是相机(CCD/CMOS)
,包含的像素越多,画面分辨率也就越高
面阵相机一次拍摄一个区域,视觉检测中绝大部分应用面阵相机
线阵相机一次拍摄一行像素,通过移动以及拼接来获取图像,分辨率高,价格较为昂贵
传感器得到数据后,利用插值算法生成实际的图像
相机的光学模型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1IdmJPF9-1645958195344)(C:\Users\AlexMiller\AppData\Roaming\Typora\typora-user-images\image-20220216143214276.png)]
镜头畸变
由于镜头中间部分的放大率和周围的放大率不同而产生的,焦距越短失真程度会越大
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mAqRTXTt-1645958195345)(C:\Users\AlexMiller\AppData\Roaming\Typora\typora-user-images\image-20220216143452275.png)]
图像的采样和量化
数字化坐标值称为采样,数字化幅度值称为量化
图像的分辨率
分辨率 160 * 128 的意思是水平像素数为160个,垂直像素数为128个,像素的数目越多,感应到的图像就越精密
视频图像一般采用 smpte 制定的格式标准,如 1080p,表示垂直方向有 1080条水平扫描线(p代表隔行扫描)
图像的灰度级
最常见的图像为 8位图像,灰度级为 256位
灰度级越多,可以展现的图像细节就越多
图像的坐标
图像原点为图像的左上角,坐标记为 [0,0]
一副 M * N 的图像可以用一个矩阵来表示 KaTeX parse error: Undefined control sequence: \matrix at position 9: \left[ \̲m̲a̲t̲r̲i̲x̲{ f(0,0) & ... …
像素的空间关系
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3vWpZ7qU-1645958195346)(C:\Users\AlexMiller\AppData\Roaming\Typora\typora-user-images\image-20220216150609444.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nziGT9sI-1645958195348)(C:\Users\AlexMiller\AppData\Roaming\Typora\typora-user-images\image-20220216150702168.png)]
图像的种类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kJItcF1z-1645958195350)(C:\Users\AlexMiller\AppData\Roaming\Typora\typora-user-images\image-20220216151122787.png)]
除了
色彩模型
CMYK 色彩模型
印刷业通过青©,品(M),黄(Y) 三原色油墨的不同网点面积率的叠印来表现颜色,一般采用青©,品(M),黄(Y),黑(BK) 四色印刷
HSV 色彩模型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BX6hs3yY-1645958195351)(C:\Users\AlexMiller\AppData\Roaming\Typora\typora-user-images\image-20220216152216655.png)]
HSV 与 RGB的转换
R G B − > H S V RGB -> HSV RGB−>HSV
h = { 0 ° , m a x = m i n 60 ° × g − b m a x − m i n + 0 ° , m a x = r a n d g ≥ b 60 ° × g − b m a x − m i n + 360 ° , m a x = r a n d g < b 60 ° × b − r m a x − m i n + 120 ° , m a x = g 60 ° × r − g m a x − m i n + 240 ° , m a x = b h=\begin{cases} 0°,max=min\\ 60°\times\frac{g-b}{max-min}+0°,max=r & and & g\geq b\\60°\times\frac{g-b}{max-min}+360°,max=r&and&g<b\\60°\times\frac{b-r}{max-min}+120°,max=g\\60°\times\frac{r-g}{max-min}+240°,max=b\end{cases} h=⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧0°,max=min60°×max−ming−b+0°,max=r60°×max−ming−b+360°,max=r60°×max−minb−r+120°,max=g60°×max−minr−g+240°,max=bandandg≥bg<b
s = { 0 m a x = 0 m a x − m i n m a x = 1 − m i n m a x o t h e r w i s e s=\begin{cases}0&max=0\\ \frac{max-min}{max} = 1-\frac{min}{max}&otherwise\end{cases} s={ 0maxmax−min=1−maxminmax=0otherwise
v = m a x v=max v=max
H S V − > R G B HSV->RGB HSV−>RGB
h i = ⌊ h 60 ⌋ ( m o d 6 ) h_i=\left\lfloor\frac{h}{60}\right\rfloor(mod\quad6) hi=⌊60h⌋(mod6)
f = h 60 − h i f=\frac{h}{60}-h_i f=60h−hi
p = v × ( 1 − s ) p=v\times(1-s) p=v×(1−s)
q = v × ( 1 − f × s ) q=v\times(1-f\times s) q=v×(1−f×s)
t = v × ( 1 − ( 1 − f ) × s ) t=v\times(1-(1-f)\times s) t=v×(1−(1−f)×s)
对 于 每 个 颜 色 向 量 ( r , g , b ) 对于每个颜色向量(r,g,b) 对于每个颜色向量(r,g,b)
( r , g , b ) = { ( v , t , p ) , h i = 0 ( q , v , p ) , h i = 1 ( p , v , t ) , h i = 2 ( p , q , v ) , h i = 3 ( t , p , v ) , h i = 4 ( v , p , q ) , h i = 5 (r,g,b)=\begin{cases}(v,t,p),h_i=0\\(q,v,p), h_i=1\\(p,v,t),h_i=2\\(p,q,v),h_i=3\\(t,p,v),h_i=4\\(v,p,q),h_i=5\end{cases} (r,g,b)=⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧(v,t,p),hi=0(q,v,p),hi=1(p,v,t),hi=2(p,q,v),hi=3(t,p,v),hi=4(v,p,q),hi=5
图像的直方图
是图像处理中的一个非常重要的工具,被广泛应用
本质是概率分布的图形化,同时直方图也可以用来表示向量
假设有如下的图像
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0kphbNDu-1645958195353)(C:\Users\AlexMiller\AppData\Roaming\Typora\typora-user-images\image-20220216155512779.png)]
我们记录每个像素出现的次数 v 0 = 5 v 1 = 12 v 2 = 18 v 3 = 8 v 4 = 1 v 5 = 5 v 6 = 8 v 7 = 5 v_0=5\quad v_1=12\quad v_2=18\quad v_3=8\quad v_4=1\quad v_5=5\quad v_6=8\quad v_7=5 v0=5v1=12 标签: e2半导体传感器