目前人工智能Artificial Intelligence主要分为两大分支:
- 计算机视常见:Computer Vision,简称CV
CV主要是研究如何让机器看懂世界的一种技术,通过各种光学传感器来代替人眼对目标对象进行识别,跟踪和检测,使机器能够处理输入的各种图像和视频。
- 自然语言处理:Natural Language Processing,简称NLP
NLP主要是研究如何机器读懂世界的一种技术,最终执行如语言翻译、智能客服等。
因为目前所从事的项目都是基于CV的,所以我来总结一下CV的相关知识。从上述简介可以看CV是要让机器看懂世界,那么最直观的就是传递图像或视频给机器。那么我们就需要了解图像和视频的基本知识,如下所示:
图像基础知识
说到图像,最直观的就是一张静态图片。而图像又可以分为位图图像和矢量图像。
位图图像
位图图像又称点阵图像或栅格图像,是指由很多个点按照指定的颜色和一定的顺序组成的矩形网络。当一张位图持续放大到一定比例后,便可以很清楚看到每个矩形网格。如下所示:
常见的图像格式扩展名为:JPG、BMP、PNG、JPEG等
矢量图像
矢量图也称为面向对象的图像或绘图图像,通常由点、直线或多边形等基于数学对象的几何图表示图像。其最大的特点是放大图像后不会失真且和分辨率无关。如下所示:
常见的矢量图格式扩展名为:ai,cdr等。
图像处理的基本概念
- 像素:
组成图像的最基本单元
像素(pixel,简写为px)这个概念,也可以看成是Picture和Element两个单词的头组成,如下所示:
pix~picture~ + el~element~ = pixel
- 像素尺寸
位图图像长度和高度两个方向上的像素数目
我们常说的图片大小其实就是说这张图像的长和高两个方向各有多少个像素点,如图片大小为1920*1080,则意味着长度方向上有1920个像素点,高度方向上有1080个像素点,则总的像素点为:1920*1080=2073600,也就是我们常说的这个图像是200万像素级别。
- 图像分辨率
图像分辨率PPI(Pixel Per Inch)指的是每英寸像素数。尺寸相同的情况下,分辨率越高,像素点就越小,图像越清晰。
例1*1英寸的图像,50PPI,则像素总数为:50*50=2500
- 文件大小
文件所占用存储空间的大小
常见图像文件格式
- PSD
PhotoShop特有的图像文件格式,可记录图层、通道、颜色模式,参考线及文件信息属性,占用空间较大
- JPEG
一种有损压缩文件格式,设置了12个压缩级别。它是将人眼很难察觉的冗余图像和彩色数据去除。因此图像占用存储空间较小且图像品质受到很少影响。该格式支持RGB、灰度等颜色模式。但不支持Alpha通道和图层。
- GIF
一种有损压缩文件格式,丢失的不是图像的像素,而是图像的色彩。常用于保存为网页数据传输的图像文件,缺点是不能存储超过256色的图像,不支持图层和Alpha通道
- PNG
该图像格式吸取了GIF和JPEG的优点,既有丰富的色彩和较高的压缩比,又支持透明图像的制作,可边下载边显示,但不支持动画。
- BMP
Windows中的标准图像格式,支持RGB、索引颜色、灰度和颜色模式,但不支持Alpha通道
色彩属性
- 色相(Hue)
指色彩的种类和名称,如红、橙、黄.... 取值范围 0°~360°,每个角度可以代表一种颜色。常以红色为0度(360度);黄色为60度;绿色为120度;青色为180度;蓝色为240度;品红色为300度。而我们描述某一物体的颜色时,即是以色相进行描述的。
- 饱各度(Saturation)
常用于表达颜色的强度或纯度,即用 0%(纯灰色) 至 100%(完全饱和) 的值描述了相同色相下色彩纯度的变化。数值越大,颜色中的灰色越少,颜色越鲜艳,呈现一种从灰度到纯色的变化。一句话总结就是颜色中的灰色量含量的高低.
- 亮度(Luminance)
常用于表示颜色的相对明暗程度,其作用是控制色彩的明暗变化。同样使用了 0%(黑色) 至 100%(白色) 的取值范围。数值越小,色彩越暗,越接近于黑色;数值越大,色彩越亮,越接近于白色。一句话总结就是颜色中混合了多少白色或黑色。
- 对比度
指不同颜色之间的差异。对比度越大,两种颜色之间的反差也就越大,反之颜色越相近。如提高一张灰度图像的对比度,则会使图像变得黑白鲜明,而降低对比度时,图像中不同部分的颜色则趋于相同,最终会使整张图像变为灰色。
色彩模式
- RGB色彩模式
色彩模式是指用数据表示颜色的一种表示方法。在计算机领域内Red、Grenn、Blue称之为基色分量。
通过这三种基色分量依据不同的比例可以调和出不同的颜色。在计算机领域中,RGB的取值为0~255,共256(2^8^)个值。如下所示在Windows自定义颜色
通过RGB混合的方式,我们可计算出所表示的总颜色为256^3^=16777216,这即是大家常见的1600万色,而每一种可以用8bit来表示,所以表示三种颜色需要占用3*8=24bit,而这个颜色已经超出人眼能够识别的范围,故又称之为真彩色。
- CMYK色彩模式
CMYK是模拟印刷油墨的基本四色表示,以纯青色、洋红色、黄色、黑色去调配颜色,这种方式是以打印纸上的油墨的光吸收特性为基础的印刷模式。因此彩色印刷叫作四色印刷。
C:Cyan 青色
M:Magenta 品红色
Y:Yellow 黄色
K:blacK 黑色
- 灰度模式
指用单一色调表示图像,一个像素的颜色可以用8bit来表示,因此灰度模式的范围为0~255共256个灰度级别,最高为纯黑、最低为纯白,即是黑->灰->白的过渡。
灰度模式是不可逆的,一旦转换就会丢失颜色信息。
在RGB模式中,三个值相等的时候显示的就是灰度色彩模式
- Lab模式
是光度分量和两个色度分量组成。
L:代表亮度,范围0~100%,记录图像的细节,但不记录颜色
A:从绿到红的光谱变化,范围在-120~120
B:从蓝到黄的光谱变化,范围-120~120
- 位图模式
彩色图像去掉彩色信息就变为灰度模式,那灰度模式去掉灰度信息,就只剩下黑与白,这种情况下,我们称之为位图模式。
- 索引模式
根据图像中的像素来查找颜色,将查找的颜色定义为一个颜色表,用以存放并索引图像 中的颜色。索引图像最多只可包含256种颜色,因此容易出现失真的情况。
示例代码
以上总结了这么多,下面我们来使用OpenCV动手实践一下,示例代码如下所示:
import cv2 import numpy as np # 原始图片 imgPath=r"F:\编程资料\编程工程\OpenCV学习笔记\04其他\01测试图片\TestImage.jpg" # 保存为灰度图片 saveImgAsGrayPath=r"F:\编程资料\编程工程\OpenCV学习笔记\04其他\01测试图片\SaveAsGrayImg.png" # 保存为LAB模式图片 saveImgAsLabPath=r"F:\编程资料\编程工程\OpenCV学习笔记\04其他\01测试图片\SaveAsLABImg.png" # 保存为位图图片 SaveImgAsBitPath=r"F:\编程资料\编程工程\OpenCV学习笔记\04其他\01测试图片\SaveAsGrayBit.png" # 以彩色模式读入 img=cv2.imdecode(np.fromfile(imgPath,dtype=np.uint8),cv2.IMREAD_COLOR) # 保存灰度图像 gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) cv2.imencode(".jpg",gray)[1].tofile(saveImgAsGrayPath) # 保存为LAB模式 lab=cv2.cvtColor(img,cv2.COLOR_BGR2LAB) cv2.imencode(".jpg",lab)[1].tofile(saveImgAsLabPath) # 转换为位图模式 binaryImg=cv2.imdecode(np.fromfile(saveImgAsGrayPath,dtype=np.uint8),cv2.IMREAD_GRAYSCALE) _,binary=cv2.threshold(binaryImg,100,255,cv2.THRESH_BINARY) cv2.imencode(".jpg",binary)[1].tofile(SaveImgAsBitPath)
最终生成的结果如下所示: