opencv学习1:图像处理入门

要学习机器视觉或计算机视觉,首先要明白什么是数字图像。在这里对数字图像做一个简单的说明,以方便大家了解具体做图像处理是在做什么。
所谓数字图像,顾名思义,就是用数字表示的图像。怎么用数字来表示图像呢?你所看到的电脑或手机上的图像具有各种色彩,形状。那么,它们在计算机里面是怎么表示的呢?计算机只认识“0”和“1”。其实不管什么图像,对计算机而言就是一堆数字。
在这里插入图片描述
图1 黑白图像
比如图1,我们看到的是黑白图像,其实在计算机里面就只有“0”和“1”,其中“0”表示黑色,“1”表示白色。
在这里插入图片描述
图2 灰度图像
图2是一张灰度图像,这个灰度图像就类似于我们早期的黑白电视的图像,在计算机内也是一堆数字,对于灰度图而言,数字不只是“0”和“1”,而是“0”到“255”之间的任意数字。其中“0”表示黑色,“255”表示白色,中间的数字依次表示黑色到白色之间的过渡。数字在计算机里面是用二进制表示的,灰度图像从“0”到“255”之间的每个数字表示像素值,每个像素值以二进制方式存储在计算机里面。如果我们用数字的方式来看上面的图像,就类似于下面这一堆数字:
在这里插入图片描述
图3 灰度图的数字表示
所以,我们说数字图像处理,因为图像在计算机里面就是一堆数字,我们处理的是具体的数字。显然,这一堆数字看起来就像是二维矩阵。所以,用二维矩阵来存储图像数据非常合理。同时,很多人一看到这对数字,就感觉与线性代数中学的矩阵知识有关,就会想到用矩阵的知识来处理图像。学习数字图像处理与数学有很大关系。但是,图像处理不仅仅是矩阵的知识,也包括很多别的方面的数学知识,比如概率论。即使最简单的高等数学中学的知识,也有很多应用在数字图像处理中,比如求导数来提取边界。简单的说,数字图像处理就是对这些数字进行数学运算,然后得到我们相应的特征信息。至于用到哪些数学知识,就看你自己的本事了。
在这里插入图片描述
图4 彩色图像
在这里插入图片描述
图5 彩色图像的数字表示
图4和图5是24位彩色图像以及数字表示,彩色图像在计算机里面采用RGB三种颜色表示,现实世界中的各种颜色,可以用RGB三种颜色的不同组合来模拟。每种颜色有“0”到“255”种,RGB三种颜色就可以组合成各种不同的颜色。看起来与我们在现实世界上看到的各种彩色图像一样。
上面介绍了灰度图和彩色图,平时我们说的8位灰度图,24位彩色图是指图像的位数。8位图像是指图像每个像素在计算机中所占的二进制位数。24位表示每个像素值占24位。RGB三个颜色通道每个颜色占8位。
在这里插入图片描述
图6 像素值的二进制表示
图6 是8位灰度图像中一个像素值的二进制表示,其实8位图像的像素值是索引值,对于灰度图而言,RGB三个颜色通道在每个像素值上是相同的,所有,我们只需要存储一个值就可以,这样可以节省存储空间,由于RGB三个通道的值相同,因此,索引值也就是具体的像素值。除了8位,24位之外,还有一种16位彩色图像,这种彩色图像每个像素值用16位来表示,RGB三个通道中每个通道不是8位来表示的,具体如下图
在这里插入图片描述
图7 16位图像的存储方式
图只表示是了一种16位图像的存储方式,每种颜色占5位,最高位空着,用“0”表示。称为555格式,16位图像的颜色值需要进行变换,这种图像称为高彩色,或叫增强型16位色,或64K色。这种图像处理起来比较麻烦,现在感觉使用也不多了。
24位图像每个像素24位,占据三个字节,每个字节表示RGB的每个分量,真彩色,颜色级有2^24种,完全可以表示真实世界中的颜色。
在这里插入图片描述
图8 24位图像的存储方式
所谓数字图像处理,就是对这些数字进行运算,然后得出我们想要的特征。8位灰度图像占用的计算机存储空间小,数据量也小,运算速度快。因此,在实际应用中,常采集这种灰度图来进行特征检测。一般如果需要通过颜色来区分特征才使用24位彩色图。
在OpenCV中,采用Mat数据类型来表示图像数据。读出来的图像可以存储在Mat类型中,是一个二维矩阵数据。
比如,采用下面这种方式,就可以读取一张图像到Mat数据类型中。
c++代码:
Mat ReadImage=imread(“E:/pcbData/01_missing_hole_01.jpg”,1);
python代码:
ReadImage=cv2.imread(“E:/pcbData/01_missing_hole_01.jpg”,1)
可以输出Mat数据到控制台观察图像对应的像素值。最终显示效果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lang_shi/article/details/129386204