图画的基础知识
作者:ZackSock
1、计算机中的图画
在计算机中,图画是以二进制方法存储的。但是咱们一般不会以二进制办法操作图画,在opencv装置教程处理图画时咱们更乐意数组初始化把图画看作是一个点集。这个集结是以二维的办法分布的,每个点都有自己的色彩,每个点都不行再切开。这样的点咱们称它为【像素】。比方下面这张图片:
咱们能够把它看作是一个5*5的图画,其间每个点都数组c言语是黑色的。
前期的计算机只能闪现简略的图画,比方【二值图opencv摄像头像】。这种图画非数组公式黑即白,不容许第三种色彩存在。比方下面:
关于这种图片,咱们每个像素只需求一位二进制(0,1)就能够标明。但是这种图画不能满足人的需求,所以又有了细节更加丰富,但仍旧没有色彩的图画,也便是咱们后面会接触到的【灰度图画】。比方下面:
上面的图opencv-python像保留了实在场景中的大多数细节。二进制计算器假定再用一位二进制标明灰度图的像素就显得有些缺乏了,因而灰度图需求用8位二进制来标明,也便是opencv40-255。由于现在硬盘不再是稀缺资源,所以二值图画咱们一般也用数组去重办法8位opencv人脸辨认原理二进制标明。用0标明0(黑色),用255标明1(白色)。
假定要标明五颜六色图画就更加opencv-python杂乱了OpenCV,下面是一贯图片的RGB图画:
所谓的RGB图画便是一张像素由三个值来标明的图片。三个值分别标明红、绿、蓝三种色彩的程度。比方假定一个像素的赤色程度是255,其它两个色彩程度是0,那么这个像素在咱们看来便是赤色的。经过这三种色彩的调配,咱们能够配出4294967296种不同的色彩。
当然,咱们日子种的图画还要丰富得二进制手表多,比方透明图画、动态图画等。这儿就不再详细说了。
2、OpenCV中的图画数组的界说
在上面说到的对不同图画的了解在OpenCV中是一样适用的。
在数组初始化OpenCV中,图画以n数组指针darray类型存储数组去重。ndarray是numpy中的数组,它具有多个维度,它能够标明图画的完好信息。包括图片的宽高、像素的值等。咱们能够检验看看下面这张图片的ndarray数组:
由于比较长,咱们截取一部分检查,下面是输出作用:
[[[245 225 190]
[245 225 190]数组c言语
[245 225 190]
...
[214 195 184]
[214 195 184]
[214 195 184]]
[[245 225 190]
[245 225 190]
[245 225 190]
现阶段咱们还不需求太介怀数组的内容,OpenCV供应了opencv4简略的API供咱们获取图片的要害信息。下面咱们来简略看一下。
3、获取图二进制像信息
在获取图画信息之前,咱们需求运用imread函数读取图片。咱们看下面这段代码:
import cv2
im = cv2.imread('xscn.jpg')
print("图画的形状:", im.shape)
print("图画的巨细opencvsharp:", im.size)
print("图画的数据类型:", im.dtype)
我opencv摄像头们先看一下输出的作用,
图画的形状: (108二进制转八进制0, 1920,opencv4 3)二进制计算器
图画的巨细: 6220800
图画的数据类型: uint8
再来解释一下各个参数:
- shape:图片的形状,包括高、宽、图层数的信息
- size:高*宽*图层数的值
- dtype:每个数据的类型。关于灰度图,一个数据便是一个像素。关于RGB图画,一个数据便是一个像素中一种色彩的值。unit8标明8位二进制的正整数(0-255)
其间图层数标明一个像素由几个数据组成。比方灰度图的图层数是1,而RGB图画的图层数是3。
4、图数组排序像坐标
为了便当,咱们能够为图画构建一个坐标系,这个坐标系不需求实践结构,而仅仅为了便当咱们了二进制转八进制解。
咱们来看下面这张二进制转化为十进制图片:
咱们构建了一个坐标系,然后把图片的左上角对应原点。这二进制转换器样我数组去重办法们能够用(x,y)方法界说一个像素点,比方图中的点A的坐标为(500,300)。
5、获取像素值
获取像素值同样需求先读取图画,然后咱们能够经过下面的办法来访问指定方位的像素:
im[y][x]
其间im是咱们的图片方针。x、y对应坐标中的x、y。比方下面这段代码:
import cv数组2
im = cv2.imread('xscn.jpg')
pixel = im[0][0]
print(pixel)
输出作用如下:
[245 225 190]
由于读取的是RGB图画,所以单个像素由三个数据组成。咱们还可二进制手表以进一步获取某个色彩的值,比方我想获取坐标为(100,100)的像素中赤色的值,咱们能够这样获取:
red = im[100][100][0]
但opencv人脸辨认原理是其实这样是过错的。由于在OpenCV中,图画默认标明为GBR方法,而上面咱们获取的应该是绿色的值。正确获取赤色的操作应该如下:
red = im[100][100][2]
6、修改像素值
像素值的修改非常简略,咱们只需求找到某个像素,然后对其赋值即可。比方咱们对下面这张图片进行操作:
上面为了便当观看,把一张3*3的图片扩大后的作用。咱们用代码对图片像素进行修改二进制:
import numpy as np
im = np.zeros((3, 3, 1),opencv怎样装置 dtype=np.uint8)
im[二进制怎样算0][2] = 255
其间np.zeros的作用是创建一个多维数组。咱们直接把它了解为创建了上面的图画,后续咱们会有更详细的阐明。
创建图画后咱们把(2,0)处的像素修改为255,下面是修改后的图片:
能够看到指定像素被修改了。