10 OpenCV图像处理
opencv
/home/liupc
这个作者很懒,什么都没留下…
展开
-
OpenCV图像处理目录
主要是学习通过Python使用OpenCV进行图像处理。重点在于学习如何使用函数进行图像处理。函数是如何实现的,不讨论。 0 opencv的安装 1 图像处理基础 图像的读入、显示、保存 2 图像运算 3 类型转换 4 几何变换 5 阈值分割 6 图像平滑处理 7 ...原创 2019-03-21 15:15:40 · 1261 阅读 · 0 评论 -
补充:自适应池化
在alexnet的实现中,在FC层之前使用了AdaptiveAvgPool2d这个trick。自适应的池化。这个trick就是使得图片,不管多大的分辨率,输出都是6*6的。为什么要都统一成6*6呢?因为后面接了FC层,FC的输入神经元数目是固定的。如果前面的输入的神经元个数不匹配的话,那么这个FC层是没办法运行的。所以接了一个自适应的池化,把尺寸不匹配的特征图都池化到6*6。例1:当不加AdaptiveAvgPool2d()时,输入的尺寸必须是固定的。alexnet代码中不加自适应池化,原创 2021-08-15 16:09:08 · 2004 阅读 · 0 评论 -
Matplotlib(9)——图片
如果直接使用plt来显示图片,可能会报错。。。 结果: 但是有时候,不想装opencv等工具,所以就想临时用一下。 这时候可以与,PIL库一起使用: 结果: ...原创 2020-11-30 19:27:40 · 171 阅读 · 0 评论 -
帧差法目标识别
一、帧差法二、实现import cv2# 视频文件输入初始化filename = "move_detect.flv"camera = cv2.VideoCapture(filename) #打开视频/摄像头# 视频文件输出参数设置out_fps = 12.0 # 输出文件的帧率fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', '2') #指定保存视频的编码格式out1 = cv2.V..原创 2020-11-26 17:21:52 · 478 阅读 · 0 评论 -
摄像头/视频文件打开、读写、关闭
一、摄像头/视频文件打开、读取、关闭 1 打开摄像头,并完成初始化 cap = cv2.VideoCapture(0) #0是摄像头编号。也可以输入本地视频路径。 2 捕获帧 retval, image = cap.read() 3 关闭摄像头 cap.release() 例1:打开摄像头,实时播放,按下"q"结束 ...原创 2020-11-26 15:53:05 · 2139 阅读 · 0 评论 -
连通区域分析(2):区域生长算法
一、区域生长法 区域生长法(很多地方叫种子填充法(Seed Filling)) 我感觉就是森林的深度优先遍历。 要借助栈来完成。 二、举例 首先找到第一个点1,入栈。栈中为[1 1出栈标记,看一下四周,5入栈。栈为[5 5出栈标记,看一下四周,4,9入栈。栈为[4,9 9出栈标...原创 2020-11-25 21:08:17 · 1515 阅读 · 0 评论 -
连通区域分析(1):两遍扫描算法
一、连通区域 就是相邻的白色的区域。 什么是相邻呢? 比如下图,如果按照4邻接才算相邻,则有3个连通区域。如果按照8邻接才算相邻,则有2个连通区域。 二、算法 可以使用两遍扫描法,来找出所有的连通区域,并标记。 集合...原创 2020-11-25 20:39:57 · 2952 阅读 · 1 评论 -
6.4 自动阈值分割方法:otsu大津法
一、大津法介绍 与迭代法类似的是,大津阈值法。 大津法也叫最大类间方差法。是1979年日本大津提出的。也是通过计算出一个阈值,然后使用这个阈值对图像进行分割。这个方法的阈值也是自动计算出来的。 当取最佳阈值时,类间方差最大。 大津法就是遍历所有可能的阈值,看看那个阈值得到的类间方差最大。 二、函数 在opencv中,还是使用cv2.threshold()来实现...原创 2020-11-25 17:13:12 · 2037 阅读 · 0 评论 -
6.3 自动阈值分割方法:迭代法
迭代法阈值分割的思想 固定阈值分割的阈值是给出的。那这个值能不能算出来呢? 这就是迭代法阈值分割的思想。 通过上面的迭代,知道Tk==Tk+1或者Tk 与 Tk+1相差较小时,停止迭代。 说这个算法,为了引出后面的大津法 ...原创 2020-11-25 16:32:30 · 1809 阅读 · 0 评论 -
6.2 自适应阈值法
一、介绍 固定阈值分割方法,采用一刀切的方式,在一些图像上效果比较好。但是对于不均匀,或者图像元素比较多的情况,一刀切的方法得到的结果又是不好。 有一种想法就是,把图像分成很多小块,每一块用固定阈值分割。这就是自动阈值分割中的自适应阈值法。 函数: dst = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thres...原创 2020-11-25 16:18:42 · 2817 阅读 · 2 评论 -
Gamma变换
一、Gamma变换 就是对图片的像素值做了一个非线性映射。 当gamma>1时,蓝色线表示,输出的亮度大于输入的亮度,图片会变亮。 当gamma<1时,如红色线所示,图片会变暗。 二、代码实现 opencv中应该没有对应的函数,查到的资料都是自己实现的。不难。 首先创建...原创 2020-11-24 21:45:22 · 4273 阅读 · 0 评论 -
7.5 双边滤波
一、原理 前面的方法都只考虑了空间的信息。 双边滤波综合考虑了距离和色彩信息。既能有效地去除噪声,又能姣好地保护边缘信息。 与当前点色彩差别越小,权重越大;距离越近,权重越大。 与当前点色彩差别越大,权重越小;距离越远,权重越小。 二、函数 dst = cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace, borderType)...原创 2020-11-24 20:31:47 · 232 阅读 · 0 评论 -
仿射变换(3):一般的仿射变换
一、介绍 一般的仿射变换是下面五种变换的组合:旋转,平移,缩放,错切,翻转。 仿射变换能够保持图像的平直性和平行性。平直性是指:图像经过仿射变换后,直线仍然是直线。平行性是指:图像经过仿射变换后,平行线仍然是平行线。 二、实现 opencv提供了cv2.getAffineTransform()来生成仿射变换所使用的矩阵M。 步骤一:通过cv2.getAffineTransform()来生成仿射变换所使...原创 2020-11-24 17:02:37 · 1491 阅读 · 0 评论 -
仿射变换(2):旋转
同样要使用cv2.warpAffine()进行仿射变换。 一、方法 步骤一:可以通过函数cv2.getRotationMatrix2D()获取转换矩阵 在使用之前,可以通过函数cv2.getRotationMatrix2D()获取转换矩阵。 M = cv2.getRotationMatrix(center, angle, scale) center: 旋转中心 angle:旋转角度...原创 2020-11-24 15:32:54 · 653 阅读 · 1 评论 -
5.3 仿射变换:平移
一、仿射变换 opencv使用仿射函数实现平移、旋转等。 dst = cv2.warpAffine(src, M, dsize, flags, borderMode, borderValue ]) dst:输出图像。 M是一个2*3的变换矩阵。使用不同的变换矩阵,就可以实现不同的仿射变换。 dsize: 输出图像的尺寸。 flags:插值方法,默认为INTER_LINEAR。 ...原创 2020-11-24 14:51:03 · 639 阅读 · 0 评论 -
15.6 添加文字
代码: 结果:原创 2020-11-23 22:34:08 · 111 阅读 · 0 评论 -
15.5 多边形绘制
isClosed 为闭合标记,为True表示将最后一个点与第一个点连接;为False表示不连接。 pts是每个点的坐标。这些点的坐标构建了一个大小等于"1*顶点个数*1*2"的数组,这个数组的类型必须是numpy.int32。 例: 结果: 结果: ...原创 2020-11-23 22:23:25 · 165 阅读 · 0 评论 -
15.4 椭圆绘制
一、函数 angle:旋转角度。指顺时针旋转的角度。比如,下图是旋转 0度的图像: 旋转45度的图像为: startAngle和endAngle是起始角度。都是从0度开始算。比如,起始为45度,结束为345度: 二、代码 长轴旋转90度。然后画的起始角度为45度(相对于...原创 2020-11-23 21:51:19 · 610 阅读 · 0 评论 -
15.3 圆绘制
只要圆心和半径就行了。 一、函数 二、代码原创 2020-11-23 21:24:08 · 113 阅读 · 0 评论 -
15.2 矩形绘制
一、函数讲解 跟画线段一毛一样。给出两个点就行了。 二、代码 结果:原创 2020-11-23 21:04:50 · 223 阅读 · 0 评论 -
15.1 线段绘制
一、函数 thickness:线宽。 linetype:8型更好看一下,AA型更快一些。 二、代码 例: np.uint8指,无符号整型。范围是0~255。如果是np.int8是指-127~127。像素点没有负的,所以用无符号整型。 结果: ...原创 2020-11-23 21:00:33 · 156 阅读 · 0 评论 -
4.2 颜色空间转换
一、RGB空间向HSV空间转化 cv2.COLOR_BGR2HSV 例: 结果:原创 2020-11-23 20:28:32 · 130 阅读 · 0 评论 -
图像属性:格式、尺寸、分辨率、通道数、颜色空间
一、图像格式 BMP:位图 二、图像尺寸 灰度图像:0~255 0:黑色 255:白色 彩色图像:RGB三通道,每个通道0~255。 三、图像分辨率和通道数 ...原创 2020-11-20 22:37:18 · 6707 阅读 · 0 评论 -
数字图像介绍
一、什么是数字图像 数字图像就是将图像用数字表示。 二、数字图像的起源 三、常见的成像方式 电磁波,最基本的单元叫做光子。 光子具有能量。能量E= h*f。h是常数,f是频率。 又频率与波长成反比。 3.1 gama射线成像...原创 2020-11-20 21:51:54 · 3727 阅读 · 0 评论 -
14.7 使用Opencv实现低通滤波
点击此处返回总目录 本次课介绍实现低通滤波。 关于高频、低频、滤波的一些知识见 《14.3 使用Numpy实现高通滤波》 一、实现方法 步骤一:傅里叶变换 步骤二:去掉...原创 2020-08-21 11:45:55 · 581 阅读 · 0 评论 -
14.6 使用Opencv实现逆傅里叶变换
点击此处返回总目录 本次课介绍使用OpenCV来实现逆傅里叶变换。 一、使用到的函数 (1) cv2.idft() ...原创 2020-08-21 11:33:32 · 320 阅读 · 0 评论 -
14.5 使用Opencv实现傅里叶变换
点击此处返回总目录 本次课介绍使用OpenCV来实现傅里叶变换。 一、用到的函数 (1) cv2.dft() (2) numpy.fft.fftshif...原创 2020-08-21 11:21:54 · 221 阅读 · 0 评论 -
14.3 使用Numpy实现高通滤波
点击此处返回总目录 本次课介绍在频域进行高通滤波。 频域就是傅里叶域。 一、高频和低频 低频:细节。 高频:边界。 ...原创 2020-08-21 10:49:47 · 2896 阅读 · 0 评论 -
14.2 Numpy实现逆傅里叶变换
点击此处返回总目录 这节介绍使用Numpy实现逆傅里叶变换。 一、什么是逆傅里叶变换 首先介绍什么是逆傅里叶变换。 左边是原始图像,右边是通过傅里叶变换得到的频谱图像。 逆傅里叶变换就是由频谱得...原创 2020-08-20 18:20:58 · 4893 阅读 · 0 评论 -
14.2 Numpy实现傅里叶变换
点击此处返回总目录 本次课介绍使用numpy实现傅里叶变换。 一、函数介绍 本次课介绍使用numpy实现傅里叶变换的几个函数。 1. numpy.fft.fft2() 这个函数用来实现傅里叶变换。...原创 2020-08-20 17:58:07 · 3976 阅读 · 0 评论 -
14.1 傅里叶变换的理论基础
点击此处返回总目录 这次课介绍傅里叶变换的理论基础。 首先看一个实际生活的例子: 一种饮料的制作流程如下,18:00的时候放入1份冰糖,3份红豆,...;18:01的时候放入....大概持续了一个小时,这个饮料就制作完成...原创 2020-08-20 16:43:03 · 1098 阅读 · 0 评论 -
13.6 直方图均衡化:函数实现
点击此处返回总目录 这节课介绍直方图均衡化函数 例1:对原始图像的直方图和 均衡化后的直方图进行对比 结果: ...原创 2020-08-20 15:34:37 · 369 阅读 · 0 评论 -
13.5 直方图均衡化:原理
点击此处返回总目录 这节介绍直方图均衡化的原理。 一、什么是直方图均衡化 首先我们看官网上面给出的一个示意图。 左边是原始的直方图,右边是均衡化以后的结果。 ...原创 2020-08-20 15:05:41 · 3066 阅读 · 2 评论 -
13.4 掩膜的使用
点击此处返回总目录 本次课介绍使用掩膜的直方图。就是说有时候不想生成整个图像的直方图,而是生成某一个区域的直方图。 一、什么是掩膜 首先我们看一下什么是掩膜: 掩...原创 2020-08-20 11:04:34 · 1184 阅读 · 0 评论 -
13.3 直方图的绘制:使用opencv统计直方图的信息
点击此处返回总目录 上一节讲了绘制直方图的一种方法: 直接使用matplotlib.pyplot的库函数hist来绘制直方图。 这一节讲绘制直方图的另一种方法: 首先使用opencv的库函数calcHist()计算直方图的信息。 ...原创 2020-08-20 10:31:15 · 346 阅读 · 0 评论 -
13.2 使用Python的matplotlib库绘制直方图
点击此处返回总目录 一、matplotlib库介绍 在Python库里面,有一个matplotlib的库。这个库里面有一个pyplot的功能,它提供了类似与matlba的绘图框架。 注:我们去介绍很多...原创 2020-08-19 17:49:35 · 1211 阅读 · 1 评论 -
13.1 直方图的基本概念
点击此处返回总目录 这节课介绍直方图的基本概念。 一、直方图 首先看一个例子: 上面是原始图像,下面是图像的直方图。 什么...原创 2020-08-19 17:24:00 · 3808 阅读 · 0 评论 -
12.1 图像轮廓
点击此处返回总目录 本章讲一下图像轮廓。 一、什么是图像轮廓 边缘和轮廓的关系: 另外要注意三个问题: 说明: 1....原创 2020-08-19 16:14:58 · 453 阅读 · 0 评论 -
11.5 拉普拉斯金字塔
点击此处返回总目录 本次介绍拉普拉斯金字塔。 一、拉普拉斯金字塔 我们前面学的金字塔是高斯金字塔。这里学拉普拉斯金字塔。 首先对原始图像Gi进行向下取样,然后向上采用,最后与原始图像相减,得到拉普拉...原创 2020-08-19 14:53:46 · 4135 阅读 · 0 评论 -
11.4 向上取样与向下取样的可逆性研究
点击此处返回总目录 首先回顾一下向下采样和向上采样: 当图像先经过向下(上)取样,再向上(下)取样,图像大小又变为跟原来一样了,这时候清晰度是否一样呢? ...原创 2020-08-19 11:05:02 · 537 阅读 · 0 评论