探索OpenCV--计算机视觉的入门指南
OpenCV(开源计算机视觉库)是一个用于计算机视觉和图像处理的跨平台库。它是由Intel发起并由多个贡献者维护的一个项目,现已被广泛应用于各种商业产品中。
OpenCV支持多种编程语言,如C++、Python等,并且可以在Windows、Linux、Android和Mac OS等操作系统上运行。
主要特点:
丰富的功能:OpenCV包含了大量预处理、特征检测、物体识别、结构分析、3D重建、机器学习等功能。
跨平台:可以在多种操作系统下使用。
开源:基于BSD许可发布,允许免费用于商业和研究目的。
社区活跃:拥有庞大的开发者和用户社区,提供了大量的教程和支持。
网址:
安装
使用如下命令安装openCV
pip install opencv-python
引入
import cv2
读取图像
使用imread
读取图像
img = cv2.imread('image.jpg')
img = cv2.imread('image.jpg', flags=0)
对于flags
的输入有如下三个选项:
1
: 加载彩色图像0
: 加载灰色图像-1
: 加载包含alpha通道的图像
读取后的图像为numpy数组, 若为彩色图像, 则为三维数组,其颜色格式默认为BGR
如果想转换成RGB
,使用如下代码:
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
显示图像
img = cv2.imread('image.jpg')
cv2.imshow('test_show_image', img) # test_show_image为窗口名,可以为None或者任意字符串
cv2.waitKey(0) # 等待任意键盘按键输入
cv2.destroyAllWindows() # 销毁所有窗口
cv2.destroyWindow("test_show_image") # 销毁指定窗口,根据上面定义的窗口名看
写入图像
cv2.imwrite('new_image.jpg', img)
获取图像属性
获取图像形状
img.shape # (height, width, channel)
返回tuple,格式为(height, width, channel),就是高,宽,通道数
获取图像的大小
img.size
获取图像某个像素的值
前面我们知道了,cv2读取的图像是一个numpy数组,所以我们可以直接使用索引来获取某个像素的值
b, g, r = img[1, 1] # 获取第1行第1列的像素值
若读取的图像为彩色图(包含多个颜色通道,通常是RGB或BGR),那么读取的像素值将是一个包含三个元素的数组或元组,分别代表每个颜色通道的值。
这里的b,g,r分别对应蓝色、绿色和红色通道的值(以openCV默认格式来看)。每个值介于0到255之间的整数。
若读取的图像为灰度图(只包含一个通道),那么读取的像素值将是一个整数值,表示该像素的灰度级。这个值通常在0到255之间,其中0表示黑色,255表示白色。
注意:
像素坐标通常是按照
(行,列)
或(y,x)
的顺序指定的如果图像包含其他颜色模式,比如HSV或YUV,那么返回的像素值将对应这些颜色空间中的各个分量。
修改图像某个像素的值
img[1, 1] = [255, 255, 255] # 将第1行第1列的像素值修改为白色
调整图像大小
resized = cv2.resize(img, (width, height), interpolation=cv2.INTER_AREA)
其中width
和height
为缩放后的图像的宽和高,interpolation
为插值方法,常用的插值方法有:
cv2.INTER_NEAREST
:最近邻插值cv2.INTER_LINEAR
:双线性插值(默认)cv2.INTER_CUBIC
:双三次插值cv2.INTER_AREA
:区域插值
旋转图像
(h, w) = img.shape[:2] # 获取图像的长或者宽
center = (w // 2, h // 2) # 取图像的中心点
M = cv2.getRotationMatrix2D(center, angle, scale) # 获取旋转后的图像矩阵
rotated = cv2.warpAffine(img, M, (w, h)) # 应用旋转
其中angle
为旋转角度,scale
为缩放比例,M
为旋转矩阵,rotated
为旋转后的图像。