本文将对opencv库进行介绍,在介绍的同时以数字图像处理为切入点,分为理论部分和实践部分,其中理论部分会对图像的基础理论知识进行介绍,实践部分会通过opencv的使用进行介绍。


数字图像基本理论

矢量图和位图

矢量图是一串数学表达公式,illustrator中编辑的图形就是矢量图。位图是图像,由位置信息和灰度信息组成,Photoshop中编辑的图像就是位图。

请添加图片描述

像素

一幅图像的表示形式是二维点阵形式f(x, y),x和y表征位置信息,f表征灰度信息。

请添加图片描述

opencv实践部分

图像读取

我们使用cv2.imread()进行图像的读取,该函数会将不同格式的图像(JPEG, BMP等)以读入,并以ndarray的数据类型进行存储,对该对象的操作就是对numpy中ndarray的操作。

在这里插入图片描述

图像通道的分离与合并

我们使用cv2.split()对图像进行分离,用cv2.merge()对图像进行合并。需要注意的是opencv的颜色通道是BGR,就是rgb反过来。当然你也可以直接把读入的图像当做numpy来进行通道分分割与合并,那样会更快,因为numpy的底层是用c写的,而python是一个很慢很慢的语言。

请添加图片描述

alpha通道的使用

增加一个二维的alpha通道便可,你的shape会变成(height, width,4)。

特定像素的访问

特定像素的访问可以通过[]采用定位的方式进行。

请添加图片描述

像素的裁剪

像素的裁剪通过[]进行,像处理ndarray数据一样。

请添加图片描述

图像的放缩

图像的放缩通过cv2.resize实现。

请添加图片描述

读图片

要想无损失读取,就用这种方法。

img = cv2.imread(name, cv2.IMREAD_UNCHANGED)

pass

GitHub 加速计划 / opencv31 / opencv
163
15
下载
OpenCV: 开源计算机视觉库
最近提交(Master分支:4 个月前 )
1d701d16 Don't overflow pointer addition 4 小时前
e76924ef In both cases we add negative value (as unsigned type), so pointer addition wraps, which is undefined behavior. 6 小时前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐