说起opencv,相信做过计算机视觉的朋友都很熟悉,特别是opencv中的cv2.cvtColor方法会用来对图片颜色通道进行转换。今天就介绍一下它的简单使用。
opencv简介
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
在计算机视觉项目的开发中,OpenCV作为较大众的开源库,拥有了丰富的常用图像处理函数库。主要应用到下面的这些领域:
1、人机互动 ;2、物体识别 ;3、图像分割 ;4、人脸识别;5、动作识别;6、运动跟踪 ;7、机器人;8、运动分析;9、机器视觉 ;10、结构分析 ;11、汽车安全驾驶
计算机视觉作为人工只能最火的一个方向,而Python作为人工能的工具语言,毫不意外的,opencv提供了opencv-python第三方包,这个包里包含许多python的高级的API接口,Python开发直接调包到方法即可使用。
方法介绍:cv2.cvtColor
cv2提供了大量的图片处理的方法,想要深入的话,去网上找一下专门的教程来学习,今天这里只简单介绍cv2.cvtColor通道的变换方式。
1、介绍此方法之前,先了解一下opencv何如读取图片的
在opencv中,图片的读取使用cv2.imread方法,下面看一个实例:
import cv2
img_path = ".\\pictrues\\canglaoshi.jpg"
def read_image():
# 读取图片的B,G,R 返回一个ndarray类型
img = cv2.imread(img_path, cv2.IMREAD_COLOR)
cv2.show("img", img)
cv2.waitKeyEx(0)
运行结果之后,读取的图片展示图下:
2、再明白了图片的读取之后,接下来就看一下,如何将BGR转化为别的格式的方法:
通道转换说明几点:
经常用到的颜色转换:BGR-->RGB, BGR-->Gray 和 BGR-->HSV
BGR-->RGB: 经过摄像头采集的图像的通道排列顺序为BGR,而BMP文件的排列顺序也为BGR,所以保存成BMP文件使不会出现什么问题。
但是在显示器上显示的时候的排列顺序为RGB,所以RGB是为了让机器更好的显示图像,。
BGR-->Gray:将BGR的图像转为单通道的灰色图像
BGR-->HSV: 一般对颜色空间的图像进行有效处理都是在HSV空间进行的。RGB是为了让机器更好的显示图像,对于人类来说并不直观,
HSV更为贴近我们的认知,所以通常我们在针对某种颜色做提取时会转换到HSV颜色空间里面来处理.
代码展示如下:
import cv2
image_path = ".\\pictreus\canglaoshi.jpg"
def cvt():
img = cv2.imread(img_path)
cv2.imshow("img", img)
# BGR-->RGB
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
cv2.imshow("img_rgb", img_rgb)
# 图像的灰化YUV(Y为灰度图, Y=0.299R+0.587G+0.114B):BGR-- >Gray
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("img_gray", img_gray)
# HSV模型转化YUV(Y为亮度, UV代表色度)BGR-->HSV
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
cv2.imshow("img_hsv", img_hsv)
cv2.waitKeyEx(0)
if __name__ == '__main__':
cvt()
运行代码之后,展示的图片效果如下:
→GBR转化为RGB←
→GBR转化为GRAY←
→GBR转化为HSV←
在实际工作中,使用opencv,,对图片通道的处理只是机器视觉中一个最基本的一个操作,当然还有一些其他的操作,大家下去可以再去深入了解一下,本文只是为大家普及一下简单的使用而已。
推荐阅读:
Python全家桶