图像处理与计算机视觉算法及应用学习记录
背景
初步浏览下,对一些对我有启发思想进行记录。
启发性预言
鉴于这本书大约是2011年出版,可以感觉到作者基于当时的发展情况,做出一些猜测,到今天基本被证实是真正发生的事情,还是蛮有意思的。
1.基于内容的搜索
基于内容的搜索指的是通过图像中的信息获取其他图像。就好像是说“找出另一张与这张图片类似的图片”。
基于内容的搜索会成为未来20年的重要技术。
这项技术可以有效地使用现代大容量的磁盘驱动器;而且随着低成本高分辨率数码相机的普及,可以预见人们越来越需要在大量大图像(海量像素数)中搜索图像。
视觉系统实践
1.基础知识
(1)图像由像素组成,在一副典型图像中,约有400~600万个像素,每一个像素表示图像中那一个点的颜色。
(2)有一些图像格式的原点在左上角(事实上大部分都是),还有一些图像格式的原点在左下角(只有Microsoft是这样的)。
(3)当图像数据结构是openCV里的IplImage数据结构时,有些有用的字段包括:
1 | origin --- 获取坐标系统的原点。这是一个整数,0表示左上角,1表示左下角。 |
(4)当读取彩色RGB图像时,用openCV里的IplImage数据结构载入图像,这种表达形式中的每一个像素都表达为3个字节:一个表示红色,一个表示绿色,一个表示蓝色。
字节顺序为b、g、r,从图像的第一行开始,按列步进,然后再显示下一行。如下所示:
1 | 第一列 第二列 第三列 …… |
这意味着第一行中像素的RGB值表示为那一行所有像素的反序(b,g,r),然后继续表示下一行,从列0开始,以此类推,直到最后一行。
(5)如果图像是彩色的,如果才能转换为灰阶呢?
这里的一个方案是:
一个彩色图像可以转换为3个单色图像(一个红色图像、一个绿色图像、一个蓝色图像),将3通道彩色图像转换为灰阶图像,使用的方法是计算RGB值的平均值
2.图像显示
openCV的用户界面函数封装在名为highgui的库中,基本概念如下:
通过cvNamedWindow函数创建一个窗口,这个函数给窗口指定了一个名称。所有的窗口都是通过窗口名称而不是指针访问的。
在创建窗口时,可以指定autosize属性,也可以不指定。接下来,可以用cvShowImage函数在已有窗口中显示图像。
对于指定了autosize属性的窗口,窗口可以更改大小以适应图像大小,否则图像会被缩放以适应窗口大小。
不论何时,调用cvShowImage,通过参数传入的图像都显示在指定窗口中。通过这种方式,可以显示一个图像连续处理的过程,因而可以创建并显示简单的动画。
窗口创建之后,可以通过cvMoveWindow(name,x,y)移动窗口。也可以像其他窗口一样通过鼠标移动。
3.图像捕捉
在一个视觉系统中,其他类型的数据和设备可能是非常有价值的图像源,其中最重要的就是网络摄像头了。这类设备通常都是数码相机,几乎都由USB供电,图像大小为640x480或更高。它们能够以视频的速率获得彩色图像,使得这一类摄像头特别适合用于某些类型的视觉应用程序:监视器、机器人、游戏、生物统计以及其他一些很容易使用到计算机而又不必使用非常高质量的图像的场合。
结合openCV
(1)如果网络摄像头正确地安装了,那么openCV就能检测到它,捕捉函数就应该能够从中获得图像。
(2)openCV使用模式为:
首先声明并初始化一个摄像头,然后使用系统创建的句柄。假设这一步成功了,那么就能够通过这个句柄获得图像了。
示例demo,比如测试笔记本的摄像头是否好用,可以用下面这个示例:
1 | #include <iostream> |