OpenCV 之图像处理基础


   OpenCV是一个跨平台的计算机视觉库,可以运行在 Linux、Windows 和 Mac OS 操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时也提供了 Python 接口,实现了图像处理和计算机视觉方面的很多通用算法。

1. OpenCV 主要模块

2. OpenCV 图像处理基础

2.1 图像处理一般流程

  图像处理的一般流程如下:

  1. 读取图像:图像的获取来源众多(相机、视频流、磁盘、在线资源等),因此图像的读取可能涉及多个函数(从不同的来源读取图像);
  2. 图像处理:使用图像处理技术处理图像,以实现所需功能;
  • 低层处理(预处理):输入一张图像,然后使用噪声消除、图像锐化、光照归一化以及透视校正等方法进行处理,最后输出另一张图像;
  • 中层处理:提取预处理后图像的主要特征,输出某种形式的图像表示(提取了用于图像进一步处理的主要特征);
  • 高层处理:接受中层处理后的图像特征并输出最终结果。例如,处理的输出可以是检测到的人脸。
  1. 显示结果:将图像处理完成后的结果以人类可读的方式进行呈现。

2.2 颜色通道顺序

  由于历史原因,在 OpenCV 中使用的颜色通道顺序为 BGR 格式非 RGB 格式。但是,有一些 Python 包使用的却是 RGB 颜色格式(如 Matplotlib 使用 RGB 颜色格式),因此,我们需要掌握图像在不同格式间的转换。

img_opencv = cv2.imread('sigonghuiye.jpeg')  # 以 BGR 顺序加载图像
b, g, r = cv2.split(img_OpenCV)  # 将加载的图像分成 (b, g, r) 三个通道
img_matlab = cv2.merge([r, g, b])  # 遵循 RGB 格式合并通道( Matlab 格式)

分别使用 OpenCV 和 Matplotlib 绘制结果以供对比:
(1)使用OpenCV绘制两张图像

img_opencv = cv2.imread('girl.jpg')  # BGR 格式
b, g, r = cv2.split(img_opencv)  # 分割通道
img_matlab = cv2.merge([r, g, b])  # 以 RGB 格式合并通道
img_concate = np.concatenate((img_opencv, img_matlab), 1)  # 同一个窗口中显示两张图像
cv2.imshow('Images', img_concate)
cv2.waitKey()
cv2.destroyAllWindows()

(2)使用Matplotlib绘制两张图像

plt.subplot(121)
plt.imshow(img_opencv)
plt.subplot(122)
plt.imshow(img_matlab)
plt.show()

2.3 基于 Numpy 的通道便捷处理

  cv2.split()划分通道是一项耗时的操作。在实际中,应优先考虑使用 Numpy 索引。如果想获取图像的一个通道,可通过如下方式获取:

B = img_opencv[:, :, 0]  # (高,宽,通道数)
G = img_opencv[:, :, 1]
R = img_opencv[:, :, 2]

此外,可使用一条 Numpy 语句将图像从 BGR 转换为 RGB:

img_matlab= img_opencv[:, :, ::-1]  # -1表示翻转读取

2.4 OpenCV 对像素的访问及操作

2.4.1 彩色图像

  • 访问(读取)某个像素值:
(b, g, r) = img_opencv[6, 40]
  • 访问一个通道:
b = img_opencv[6, 40, 0]  # 获取像素(x=40,y=6)处的蓝色值
  • 更改像素值:
img_opencv[6, 40] = (0, 0, 255)  # 将像素(x=40, y=6)设置为红色
  • 处理某个区域而非单个像素:
crop = img_opencv[0:50, 0:50]  # 即切片操作

2.4.2 灰度图像

  灰度图像只有一个通道,因此与彩色图像的处理稍有差异。

  • cv2.imread()函数:读取图像,需要指定读取图像的方式(以灰度加载图像所需的参数为cv2.IMREAD_GRAYSCALE):
gray_img = cv2.imread('girl.jpg', cv2.IMREAD_GRAYSCALE)
  • 灰度图像的尺寸为(height, width),不提供通道信息。

【转载自】OpenCV-Python实战(1)——OpenCV简介与图像处理基础

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值