OpenCV-Python中文官方文档 学习笔记 第四章 OpenCV中的图像处理

OpenCV-Python中文官方文档 学习笔记

说明:

首先介绍一下我学习的OpenCV-Python中文官方文档(引用该文档的前言):

写在前面的话

2014年段力辉在当时已翻译过OpenCV 3.0,但时隔五年,如今的OpenCV 4.1中许多函数和内容已经有所更新,因此有必要对该官方文档再进行一次翻译。

翻译过程中难免有所疏漏,如发现错误,希望大家指出,谢谢支持。

OpenCV-Python Tutorials英文官方文档:

https://docs.opencv.org/master/d6/d00/tutorial_py_root.html

其次介绍以下学习笔记的主要内容:

鉴于该文档已经相当完整,我所整理的笔记主要包含对文档内容的理解和拓展。大家在学习文档时可以将该笔记作为参考,希望它可以对你有帮助。

第四章 OpenCV中的图像处理

4.1 改变色彩空间

改变颜色空间

为了改变色彩空间,我们首先要知道什么是色彩空间。

“色彩空间”一词源于西方的“Color Space”,又称作色域,色彩学中,人们建立了多种色彩模型,以一维、二维、三维甚至四维空间坐标来表示某一色彩,这种坐标系统所能定义的色彩范围即色彩空间。我们经常用到的色彩空间主要有RGB、CMYK、Lab等。

这里我们主要使用RGB和HSV两种色彩空间。前者以加法混色为基础,类似于三色光的不同组合。而后者以减法混色为基础,类似于三颜色的不同组合。

特别地,HSV的色相范围为[0,179],饱和度范围为[0,255],明度范围为[0,255]。不同的软件使用不同的规模。因此,如果你要将OpenCV值和它们比较,你需要将这些范围标准化。

在我们了解了什么是色彩空间之后,我们需要知道如何改变色彩空间。而为了改变色彩空间,我们就要用到cv.cvtColor()函数。

函数解析:

cv.cvtColor(input_image,flag)函数需要我们提供待改变色彩空间的图片input_image和色彩空间转换标志flag。在提供它们之后,我们就可以得到已改变色彩空间的图片返回值。

代码示例:

# 获取所有色彩空间转换标志

import cv2 as cv
flags = [i for i in dir(cv) if i.startswith('COLOR_')]
print(flags)

对象追踪

在我们学会改变色彩空间之后,我们可以通过提取一个有颜色的对象,来达到追踪某个拥有特定颜色的对象。在我们的应用程序中,我们将尝试提取一个蓝色的对象。

目标:
创 建 一 个 应 用 程 序 以 提 取 视 频 中 的 蓝 色 对 象 。 创建一个应用程序以提取视频中的蓝色对象。
步骤:
读 取 视 频 的 每 一 帧 ↓ 转 换 从 B G R 到 H S V 颜 色 空 间 ↓ 对 H S V 图 像 设 置 蓝 色 范 围 的 阈 值 ↓ 单 独 提 取 蓝 色 对 象 \\读取视频的每一帧\\ \downarrow\\转换从BGR到HSV颜色空间\\ \downarrow\\对HSV图像设置蓝色范围的阈值\\ \downarrow\\单独提取蓝色对象 BGRHSVHSV
代码示例:

import cv2 as cv
import numpy as np 

cap = cv.VideoCapture(0)
while(1):
    # 读取帧
    _,frame = cap.read()
    # 转换颜色空间 BGR 到 HSV
	hsv = cv.cvtColor(frame,cv.COLOR_BGR2HSV)
    # 定义HSV 中蓝色的范围
    lower_blue = np.array([110,50,50])
    upper_blue = np.array([130,255,255])
    # 设置HSV的阙值使得只取得蓝色
    mask = cv.inRange(hsv,lower_blue,upper_blue)
    #将掩膜和图像逐像素相加
    res = cv.bitwise_and(frame,frame,mask=mask)
    
     cv.imshow('frame',frame)
    cv.imshow('mask',mask)
    cv.imshow('res',res)
    
    k = cv.waitKey(5) & 0xFF
    if k == 27:
        break
cv.destroyAllWindows()

如何追踪HSV值?

使用相同的函数cv.cvtColor()。你只需传递你想要的BGR值,而不是传递图像。

代码示例:

# 查找绿色的HSV值
green = np.uint8([[[0,255,0]]])
hsv_green = cv.cvtColor(green,cv.COLOR_BGR2HSV)
print(hsv_green)

现在把[H- 10,100,100][H+ 10,255, 255]分别作为下界和上界,就得到了HSV中绿色的范围。

除了这个方法之外,你可以使用任何图像编辑工具(如GIMP或任何在线转换器)来查找这些值,但是不要忘记调整HSV范围。

在实践过程中,上述方法不是十分实用,如何恰当的追踪HSV值,仍待考究。

练习题

  1. 尝试找到一种方法来提取多个彩色对象,例如,同时提取红色,蓝色,绿色对象。

    (待解决)

其他资源

色彩空间:https://baike.baidu.com/item/%E8%89%B2%E5%BD%A9%E7%A9%BA%E9%97%B4/4615427?fr=aladdin

stackoverflow:https://stackoverflow.com

gmip:https://www.gimp.org

你可能感兴趣的:(OpenCV-Python中文官方文档 学习笔记 第四章 OpenCV中的图像处理)