- 1 OpenCV简介
OpenCV的全称是 Open Source Computer Vision Library, 是一个跨平台的计算机视觉库。
OpenCV是英特尔公司发起并参与开发的,以BSD许可证授权发行的,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。OpenCV-pytho是OpenCV的Python API, 集成了python语言和C++语言的最优特征,致力于支持python解决传统计算机视觉问题。
- 2安装OpenCV
在python中安装OpenCV十分便捷,可以直接使用:
pip install opencv-python 或 conda install opencv-ppython
注意:安装的时候,默认安装的是最新版本的,如果有项目要求的话,可以指定特定的版本,可以使用:
pip install opencv-python== ...(具体的版本)
在成功安装OpenCV之后,可以在python编译器中输入如下的内容,查看是否安装成功:
我这边显示的是opencv的版本是4.55,说明已经安装成功。
- 3 图片的读取、显示和保持
1 图像读取
使用OpenCV读取图片文件,可以使用函数:
cv2.imread(filepath, flags)
例如使用:
image = cv2.imread('test.jpg')
该函数共接受两个输入,需要读入图片的完整路径和读入图片的方式,常用的方式包括以下三种
- cv2.IMREAD_COLOR:这个是 默认参数,读入的是彩色的图片,在此过程中忽略了alpha通道
- cv2.IMREAD_GRAYSCALE: 读入灰度图片
- cv2.IMREAD_UNCHANGED: 顾名思义,读入的是完整的图片,包括alpha通道
OpenCV读取图片后返回的是一个numpy数组,对于彩色图像,数组是三维数组,其形状是 (shape)为(图像的高,图像的宽,3),在这其中3代表的是图片的RGB三个通道,由于OpenCV在存储彩色图象时,默认的通道顺序为BGR,所以在进行图像处理的时候需要注意不要使用错误的通道顺序。
2 图像显示
使用OpenCV显示图片文件,可以使用函数:
cv2.imshow(wname, img)
例如使用:
cv2.imshow('test_image', image)
在多数使用的时候,我们会将上述的API搭配
cv2.waitKey() 和 cv2.destroyALLWindows()使用,
waitKey顾名思义,就是等待键盘输入,而destroyALLWindows就是关闭所有已经显示的窗口,搭配这两个API后即可实现:显示一张图片,并在键盘输入任意值后关闭图片的效果。
import cv2
image_bgr = cv2.imread('OIP.jpeg', cv2.IMREAD_COLOR)
image_gray = cv2.imread('OIP.jpeg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('BGR', image_bgr)
cv2.imshow('gray', image_gray)
cv2.waitKey()
cv2.destroyALLWindows()
3 图像保持
使用OpenCV显示图片文件,可以使用函数cv2.imwrite(file, img, num), 例如使用
cv2.imwrite('test_image2', image_bgr)
这个API有三个参数:第一个参数是要保存的文件路径,第二个参数是要保存的图像。第三个参数是可选参数,它针对特定的格式:对于JPEG,这个图片的后缀表示的是图像的质量,用0-100的整数表示,默认是95,第三个参数表示的是压缩级别,默认的是3。
图像几何变换
- 图像的缩放
图像的缩放其实就是改变图像的大小和形状,可以用下列的API来实现。
image = cv2.resize(src, dsize[, dst[, fx[, interpolation]]])
这个图像缩放的API的参数是非常多的,但其实也是很好理解的,下面给出这些API参数的解释:
- Image: 输出图像
- src: 输入图像
- dsize: 输出图像的尺寸
- fx: 横坐标缩放比例
- fy: 纵坐标缩放比例
- interpolation: 缩放方式
在这些参数中,输入、输出图像都是比较好理解的,输出图像的尺寸dsize是(宽,高), fx,fy一般可直接使用0-1的缩放比例,值得注意的一点是,在给定dsize时,就不需要另外输入缩放的比例了,而想使用缩放比例时,dsize应输入None。缩放的方式一般不填,直接使用默认值即可,其他的缩放方式如下:
- INTER_NEAREST 最近邻插值
- INTER_LINEAR 双线性插值
- INTER_AREA 使用像素区域关系进行重采样。它可能是图像抽取的首选方法,因为它会产生无纹理的结果。但是当图像缩放是,他类似于INTER_NEAREST方法。
均值滤波
均值滤波是最简单的滤波器,它取卷积核区域下所有像素的平均值并替换中心元素,均值滤波的代码如下:
cv2.blur(image, (...,...))# 原图,核心的大小
中值滤波
中值滤波器是一种非线性滤波器,它的基本原理是:选择待处理像素的一个邻域中各像素值的中值来代替待处理的像素。它能使某像素的灰度值与周围邻域内的像素比较接近,从而消除一些孤立的噪声点,所以中值滤波器能够很好的消除噪声的。
更多推荐
OpenCV的基础入门
发布评论