作为自动化专业的一位在读本科社畜,大类属于控制科学与工程,其下二级学科有:控制理论与控制工程、导航制导与控制、系统工程、模式识别与智能系统、检测技术与自动化装置,而其中易找工作且收入较高的当属模式识别与智能系统。下面是百度的对该学科的定义
模式识别与智能系统以 信息处理 与模式识别的理论技术为核心,以数学方法与计算机为主要工具,研究对各种媒体信息进行处理、分类和理解的方法,并在此基础上构造具有某些智能特性的系统。 在 光学字符识别 、 语音识别 、 人脸识别 、视频追踪、 医学图像处理 等方面均有广泛应用。
而提到人脸识别、图像处理 ,就不可避免的要学习一下OpenCV。所以在学有余力前提下,提前对OpenCV进行入门学习,既可以在各类竞赛中应用,又可以为研究生打下基础,一举两得。
所以,本文将分享个人在学习OpenCV的一些心得体会,提供给一同在学习OpenCV的友友们一个借鉴,有任何错误或思想上的缺陷,欢迎大家提出,希望能与大家共同进步。
对从未接触过图像识别的我来说,将一张图片转化为数字信息这一过程的原理,实在是有些难以理解,直到我在OpenCV入门的过程中才了解到,图像本身就是就是由一系列数字组成,也就是所谓的像素点。
像素是电子图像组成的基本单位,将图像放大数倍,会发现图像是由一个个“小色块”紧密排列组成的,每一个“小色块”就是一个像素点。 - -取自百度
也就是说将图像进行分割,得到图像的最小发光单位就是像素点。而每个像素点均由红、绿、蓝三个像素单元组成,也就是所谓的RGB颜色系统。
RGB颜色系统具有三个颜色通道,即对应的红绿蓝,三者通过调节不同的亮度互相叠加可得到各种颜色。而在计算机的编程系统中,将RGB颜色通道进行了量化处理,规定各通道的颜色范围0~255,分别对应不同的亮度,将不同亮度的三原色进行叠加,即可得到不同颜色的像素点。
基于上述的分析,将图像转化为数值的原理其实就非常简单了,即通过计算机系统,将构成图像的所有像素点,所对应的RGB数值,进行读取。此外易知,图像所对应的数值通常为三组数据,即三个通道。
上述分析,除1.1外,均是基于彩色图进行的,而灰度图具有自己的颜色系统:YUV颜色系统,需要进行单独分析。
Y表示明亮度,也是灰阶值,它是基础信号。U和V表示色度,UV的作用是描述影像的色彩以及饱和度,采用指定的像素颜色。 --摘自百度
通常来说,Y是必须有的,其用来表示灰度图的亮度,范围为0~255,0表示全黑,255表示全白。UV通常设定为固定值,以避免对灰度图颜色造成影响。
在使用计算机对灰度图进行数值转换时,仅读取Y通道的数值,对应一组数据表示灰度值。
通过第一部分对图像进行了理论分析,可通过OpenCV函数对分析其进行验证,所使用的函数即为图像处理基本函数。
代码如下(示例):
import cv2 #引入OpenCV函数包
import matplotlib.pyplot as plt #用于根据数值绘制图像
import numpy as np #基础的数据操作函数,用于处理读取到的数据
代码如下(示例):
img=cv2.imread('cat.jpg')
cv2.imread函数:读取名为cat.jpg 的图片,并存入img中,注意图片要与程序在同一文件夹下。
此时输出img可得到一个的三维数组,即图片各个位置像素点的RGB值,此处需要注意,所得到数组存储顺序为BGR。
#以灰度图格式读入图片
img=cv2.imread('cat.jpg',cv2.IMREAD_GRAYSCALE)
与彩色图读入方式基本相同,但要在图片名称参数后,设置颜色系统读取的格式。
命令可读取彩色图,也可读取灰度图,但所读取到的数据均为灰度图数据,即在读取时,会自动对彩色图数据进行转换,转换的具体过程可自行了解,在此不进行深入探究。
b,g,r=cv2.split(img) #将像素点参数分置
此时可将提取到的像素点BGR数值分别置于变量b,g,r中,输出三个变量,均为同等大小的一位数组。
代码如下(示例):
cv2.imshow('image',img) #像素点复现图片
#等待时间,毫秒级,0表示任意键终止,5000表示打开5秒后终止
cv2.waitKey(5000)
cv2.destroyAllWindows()
cv2.imshow函数:两个输入,前者设置图像名称,后者读取对应的像素点。
cv2.waitKey函数:设置等待的时间,达到后直接执行关闭;若设置为0,则按任意键跳过函数并执行关闭;注意时间为毫秒
cv2.destroyAllWindows函数:关闭图像窗口
因函数比较常用,可定义为子函数调用
def cv_show(name,img):
cv2.imshow(name,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
#将图片通道中的b,g都删去,即置零
cur_img=img.copy()
cur_img[:,:,0] = 0
cur_img[:,:,1] = 0
cv_show("R",cur_img)
BRG分别对应通道中的0、1、2,此处将BG通道像素点置零,即可实现单通道复现。通过此操作,可实现其余通道的复现,只要将改变置零的对象即可。
注:此处复现出的图像应该为红色
cv2.imwrite('mycat.png',img)
将img中像素点数据进行输出,以图像格式保存在函数文件夹下。图像名称与格式可在第一个参数指定。
此时可进行彩色图与灰度图之间的转换。
#数组尺寸,可用于读取图片像素点数组尺寸
img.shape
#统计像素点个数
img.size
#读取像素点类型
img.dtype
网上教程较多,此处给出我安装和学习的网址:https://b23.tv/N4jRTa2
参考来源:同济大佬OpenCV计算机视觉教程https://b23.tv/N4jRTa2
以上就是今天要分享的所有内容了,包括图像的组成、OpenCV基础函数进行验证和一些基本的数组操作函数以及本人学习所使用视频教程。
视频中老师讲的比较全面且清楚,但有些地方对于入门还有些难度,而且逻辑有些不连贯,因此需要整理一下与大家分享。
最后,配套视频效果更佳呦。