版权声明:本文为博主原创文章,转载请附源链接。
看到一个图片,不要将其当作图片,在你眼里,其实就是一个一个小格子,每个格子都有一个数值,也就是一个矩阵,格子里的数值其实就是灰度值,对于多通道的彩色图片来说,其实就相当于多个灰度图的叠加,只是说叠加的颜色不同而已。可以看作多个灰度图就可以理解了。
看到一个视频,不要将其当作视频,其实就是很多个图片而已,按照顺序从前到后播放图片。理解了这个就很容易把一堆图片做成一个视频,也可以把一个视频做成一堆图片,也就是视频分帧。原理不过如此,代码可能也就几行。
创建一个图片,其实就是创建一个矩阵,矩阵的值随意,矩阵的行和列数其实就是图片的大小,知道了矩阵,也就得到了图片。
例如,我们可以通过二维Numpy数组来简单创建一个黑色的正方形图像。,其实就是一个全为0的矩阵。灰度值为0,就是黑色。
I=numpy.zeros((3,3),dtype=numpy.uint8)
#图片I大小为3*3,灰度值全为0,也就是黑色图像
图像I上的每一个像素点都由一个8位的整数int来表示,即每个像素值的大小范围为0-255
可以通过cv2.cvtColor函数来将该图像转换成RGB三个通道图像。
I=cv2.cvtColor(I,cv2.COLOR_GRAY2BGR)
#此时图像I变成了三个通道的每个像素点的值都为0
#有27个像素值,HSV色彩空间也是同样的方式,只是只是通道数不同
下面将加载的JPEG格式的图片通过改变imread函数的参数将其读入为灰度图像,在这个过程中会丢失色彩信息。将有多通道变为单通道图片。
import cv2
I=cv2.imread(‘tu.jpg’,cv2.IMREAD_GRAYSCALE) #此时的参数选择灰度图像;
#或者为I=cv2.imread(‘tu.jpg’,0) 式中的0为其参数的简写
对于imread函数,读取图片,其可以选择的参数如下:
Image[1,0,3]中的第一个值代表像素的y坐标或者行,第二个值0代表像素的x坐标或列,0表示最左边,第三个值3表示的是通道数,[]内表示的是位置。这样可以获得图片某点的像素值
I=numpy.zeros((3,3),dtype=numpy.uint8)
I.shape
执行上述代码,结果为(3,3)
shape函数可以来查看图像的结构,会放回行、列数(图像的高度和宽度),如果是彩色图像,还会返回通道数,如BGR图像返回为(3,3,3)