OpenCV 是 Intel® 开源计算机视觉库。它由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV 拥有包括 300 多个 C 函数的跨平台的中、高层 API 。它不依赖于其它的外部库——尽管也可以使用某些外部库。OpenCV 对非商业应用和商业应用都是免费(FREE)的。 作为一个基本的计算机视觉、图像处理和模式识别的开源项目,OpenCV 可以直接应用于很多领域,作为第二次开发的理想工具。特别是新版的 OpenCV 中提供了大量的 Python 接口,极大的简化了OpenCV 函数的调用,使得使用者可以更为方便的利用 OpenCV 实现各种功能。 它有以下特点: (1) 开放的C/C++源码 (2) 基于Intel处理器指令集开发的优化代码 (3) 统一的结构和功能定义 (4) 强大的图像和矩阵运算能力 (5) 方便灵活的用户接口 (6) 同时支持MS-WINDOWS、LINUX平台 通过命令行进行安装:
sudo apt-get install python3-opencv

慢慢等待安装完成; 安装完成后接下来我们实现一下OpenCV对颜色的识别,这里用到的是HSV颜色空间,RGB 颜色空间是大家最熟悉的颜色空间,即三基色空间,任何一种颜色都可以由该三种 颜色混合而成。然而一般对颜色空间的图像进行有效处理都是在 HSV 空间进行的,HSV(色 调 Hue,饱和度 Saturation,亮度 Value)是根据颜色的直观特性创建的一种颜色空间, 也称六角 锥体模型。为什么会选择 HSV 空间而不是 RGB 空间?对于图像而言,识别相应的颜色在 RGB 空间、 HSV 空间或者其它颜色空间都是可行的。之所以选择 HSV,是因为 H 代表的色调基本上可以 确定某种颜色,再结合饱和度和亮度信息判断大于某一个阈值。而 RGB 由三个分量构成, 需要判断每种分量的贡献比例。即HSV 空间的识别的范围更广,更方便。在OpenCV中有超过150种的颜色空间转换的方法,但是我们经常会用到的也就只有两种,即 BGR-Gray 和 BGR->HSV。注意 Gray 和 HSV 不可以互相转换。 我们准备了三张出色的图片,格式都是jpg,接下来我们就用OpenCV去识别一下:
import cv2
import os
print("Current Working Directory:", os.getcwd())
image_red = cv2.imread('red.jpg')
image_green = cv2.imread('green.jpeg')
image_blue = cv2.imread('blue.jpeg')
def get_image_info(image):
height, width, channels = image.shape
print(f"WandH: {width}x{height} , CH: {channels}")
average_color = cv2.mean(image)[:3]
print(f"average (BGR): {average_color}")
print("red:")
get_image_info(image_red)
print("\ngreen:")
get_image_info(image_green)
print("\nblue:")
get_image_info(image_blue)
结果如下:
