利用Python+opencv创建图像、读取图像文件、获得图像属性等操作

版权声明:本文为博主原创文章,转载请附源链接。


一、我们应该知道的

看到一个图片,不要将其当作图片,在你眼里,其实就是一个一个小格子,每个格子都有一个数值,也就是一个矩阵,格子里的数值其实就是灰度值,对于多通道的彩色图片来说,其实就相当于多个灰度图的叠加,只是说叠加的颜色不同而已。可以看作多个灰度图就可以理解了。

看到一个视频,不要将其当作视频,其实就是很多个图片而已,按照顺序从前到后播放图片。理解了这个就很容易把一堆图片做成一个视频,也可以把一个视频做成一堆图片,也就是视频分帧。原理不过如此,代码可能也就几行。

二、创建一个图片

创建一个图片,其实就是创建一个矩阵,矩阵的值随意,矩阵的行和列数其实就是图片的大小,知道了矩阵,也就得到了图片。

例如,我们可以通过二维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函数,读取图片,其可以选择的参数如下:

利用Python+opencv创建图像、读取图像文件、获得图像属性等操作_第1张图片

四、图片的属性获取,如图片大小,某位置的像素值

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)

  • Image.shape :返回图像Image宽度、高度以及通道数,若为灰度图像,则不返回通道数
  • Image.size: 返回图像Image的像素大小,没有通道数;
  • Image.dtype: datatype的缩写,返回图像的数据类型,通常返回unit8,无符号8位整型

你可能感兴趣的:(python)