2021-08-26 OpenCV (python)学习笔记(三)
2021/9/5 20:07:01
本文主要是介绍2021-08-26 OpenCV (python)学习笔记(三),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
OpenCV 基本操作
- 图像色彩模式转换
- 图像阈值分割
- 图形平缓的典型方法
- 均值滤波
- 方框滤波
- 高斯滤波
- 中值滤波
-
图像色彩模式转换
st = cv2.cvtColor(src, code)
st
:返回处理后的图像;
src
:要处理的图像;
code
:转换图片的方式,该参数包含很多空颜色空间转换类型;常用标记举例:
- cv2.COLOR_BGR2GRAY : 从BGR彩色图像转换为GRAY灰度图像;
- cv2.COLOR_BGR2RGB : 从BGR图像转换为RGB图像;
更多的值请参考:API文档
图像色彩模式转换代码示例:
import cv2 #读取图片 filename = C:\Users\username\Desktop\opencv img = cv2.imread(filname + 'picture.jpg') #将图像转换成灰色图像 img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ps:彩色图像与灰色图像的转换是不可逆的。
-
图像阈值分割
ret, dst=cv2.threshold(src,thresh,maxval,type)
ret
:当制定了阈值参数thresh,ret就是指定的thresh(一般不用展示,可以随便取);
dst
:处理后的单通道图;
src
:原图片,只能是单通道图片,通常为灰度图(所以说进行阈值分割前,需要将彩色图像转换成灰度图);
thresh
:阈值;
maxval
:最大值,当像素值超过了阈值时自动设置为该值;
type
:操作类型,即如何处理阈值。该参数包含八种类型的阈值化操作;一下列举五种常用类型:
- cv2.THRESH_BINARY:超过阈值部分取maxval(最大值),否则取0;
- cv2.THRESH_BINARY_INV:超过阈值部分取0,否则取maxval(最大值)。它与cv2.THRESH_BINARY是互为反转的方法;
- cV2.THRESH_TRUNC:大于阈值部分设为阈值,否则不变。即截断阈值;
- cv2.THRESH_TOZERO:大于阈值部分不改变,否则设为0;
- cv2.THRESH_TOZERO_INV: 大于阈值部分为0,否则不变。它与THRESH_TOZERO互为反转。
图像阈值分割代码示例:
ret, img2=cv2.threshold(img1,150,250,cv2.THRESH_BINARY) #对图像进行阈值化处理,像素值超过150的自动设置为250
-
图形平缓的典型方法
- 均值滤波
均值滤波的目标是降低图像的变化率,将每个像素替换为该像素周围像素的均值,这样就可以平滑并替代那些强度变化明显的区域。
dst = cv2.blur(img, ksize)
dst
:处理后返回的图像;
img
:要进行处理的图像矩阵;
ksize
:均值滤波核的尺寸,一般长设置为(5,5)或(3,3);
均值滤波代码示例:
img = cv2.blur(img,(5,5))
- 方框滤波
方框滤波和均值滤波核基本一致,区别是需不需要均一化处理。
result = cv2.boxFilter(src, depth, ksize, normalize)
result
:处理后返回的图像;
depth
:表示目标图像深度,是int类型,通常用-1表示与原始图像一致;
ksize
:均值滤波核的尺寸,一般长设置为(5,5)或(3,3);
normalize
:该属性表示是否对目标图像进行归一化处理。该属性有两个值,True(进行归一化处理,等价于cv2.blur)和False(实际上为求周围各像素的和。但是这个结果很容易大于255,发生溢出,当溢出时对应像素值置为255);
方框滤波代码示例:
img = cv2.boxFilter(img, -1, (5,5), False)
- 高斯滤波
需要对一个像素周围的像素给予更多的重视,因此可以通过高斯滤波分配权重来实现。
cv2.GuassianBlur(img, ksize, sigmaX, sigmaY)
img
:要进行处理的图像矩阵;
ksize
:均值滤波核的尺寸,一般长设置为(5,5)或(3,3);
sigmaX
:X方向的标准偏差;
sigmaY
:Y方向的标准偏差;
(ps:如果仅指定了sigmaX,则sigmaY与sigmaX相同。如果两者都为0,则函数根据ksize来自动计算它们的值。)
高斯滤波代码示例:
cv2.GaussianBlur(img, (5,5), 0, 0)
- 中值滤波
以上三种方式均为线性过滤器,而中值滤波为非线性过滤器。
img = cv2.medianBlur(src, ksize)
img
:函数返回的处理结果图像;
src
:要处理的图像;
ksize
:孔径的线性尺寸,若ksize为5,中值滤波器就会使用5×5的范围来计算,即把像素的中心值及其5×5邻域组成了一个数值集,对其进行处理计算,当前像素被其中值替换掉;
(ps:ksize必须是大于1的奇数,比如:3,5,7,9…)
中值滤波代码示例:
img1 = cv2.medianBlur(img, 5)
这篇关于2021-08-26 OpenCV (python)学习笔记(三)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南