Open cv模块学习
Open cv是python中专门用于图像处理的一个库,将python的基本操作写成笔记(持续更新中)
图像基本操作
数据读取-图像
- cv2.IMREAD_COLOR:彩色图像
- cv2.IMREAD_GRAYSCALE:灰度图像
|
|
数据读取-视频
- cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1
- 如果是视频文件,直接指定好路径就可以了
视频读取和处理
|
|
截取部分图像数据
|
|
颜色通道提取
|
|
边界填充
边界填充指的是对读取的图像的边界进行扩充,在很多图像处理的算法中都能用到!
|
|
结果: 5种边界填充的结果:
- BORDER_REPLICATE:复制法,也就是复制最边缘的像素
- BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制 demo: fedcba|abcdefgh|hgfedcb
- BORDER_REFLECT_101:反射法,图像边缘为对称轴,对称 demo: gfedcb|abcdefgh|gfedcba
- BORDER_WRAP:外包装法 demo: cdefgh|abcdefgh|abcdefg
- BORDER_CONSTANT:常量法, 常数值填充
图像阈值
函数:
- ret, dst = cv2.threshold(src, thresh, maxval, type)
- src: 输入图,只能输入单通道图像,通常为灰度图。
- dst: 输出图
- thresh: 阈值
- maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
- type: 二值化操作的类型,包括以下5种类型:
类型 含义 cv2.THRESH_BINARY 超过(大于)阈值部分取maxval(最大值),否则取0 cv2.THRESH_BINARY_INV THRESH_BINARY的反转 cv2.THRESH_TRUNC 大于阈值部分设为阈值,否则不变 cv2.THRESH_TOZERO 大于阈值部分不改变,否则为0 cv2.THRESH_TOZERO_INV THRESH_TOZERO的反转
|
|
结果:
使用图像阈值5种不同方式的处理结果:
图像平滑
与卷积相关,也就是对图像进行滤波。下面的介绍都以3×3的矩阵为例。
均值滤波和方框滤波
效果几乎相同,都是对3×3矩阵做平均卷积操作。
具体实现就是通过构建一个全是1的3×3矩阵和图像中的3×3矩阵进行求内积的操作
高斯滤波
我们都知道高斯函数图像是一个比较陡峭的钟的形状。也就是差值却接近0,其值越大,应用到图像中就是(3×3矩阵),周围像素点的值与中间像素点的值差值越小,它的权重就应该越大(发挥效果越好)。
具体实现就是通过构建一个根据高斯函数构建的3×3权重矩阵和图像中的3×3矩阵求内积!
中值滤波
将3×3矩阵的像素值进行排序,取中间值。注意,中值滤波的取的n×n矩阵中(n只能为奇数)。
|
|
结果:
5种滤波的结果:
中值滤波的效果最好!
如果想不转通道用cv2输出对比图,可以使用直接打印图像的array数组(demo):
|
|
腐蚀操作和膨胀操作
-
腐蚀操作一般用于二值图像。其作用在于腐蚀图像的边界,比如很粗的文字可以通过腐蚀操作把它变细,同时可以将其边缘的毛刺直接去掉。
-
膨胀操作其实就是腐蚀操作的逆过程。
使用腐蚀操作和膨胀操作可以去掉二值图像边缘的毛刺。
|
|
结果:
- 1.从左上到右下分别是原图,迭代腐蚀1次,迭代腐蚀2次,迭代腐蚀3次的结果
不同迭代次数的腐蚀效果:
- 左边为原图,右边为腐蚀一次+膨胀一次的结果
腐蚀+膨胀的结果:
可以看到虽然部分变得模糊了一点,但横字左边的毛刺基本都被去除了。如果对图像的清晰度有要求,可以调整size的大小,越小每次腐蚀的东西更少,图像细节保留的越多!
注意:要实现图像去毛刺的效果,腐蚀的迭代次数一定要达到保证图像的基本轮廓,还要基本看不到边缘的毛刺,再进行膨胀操作,而且膨胀操作的size大小和迭代次数要和腐蚀的一样!
最后修改于 2022-04-16
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。