目录
一、计算机眼中的图像
二、通过代码对图像进行操作
1.图像的读取
2.图像的显示
三、将图像读取为灰度图像
四、保存图像
在计算机中,图像被视为一个高度×宽度的像素矩阵,每一个矩阵内存放着该像素的色彩信息。计算机中大多采用RGB颜色标准,即通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色。
部分颜色对应RGB值:
白色:rgb(255,255,255)
黑色:rgb(0,0,0)
红色:rgb(255,0,0)
绿色:rgb(0,255,0)
蓝色:rgb(0,0,255)
青色:rgb(0,255,255)
紫色:rgb(255,0,255)
import cv2
img = cv2.imread('1.jpg')
print(img)
我们将cv2导入文件中,使用“imread”函数读取存储在指定路径中的图像,并将读取后的图像存储在名为“img”的变量中。之后我们将img打印出来,可以看到如下结果:
我们可以看到,img输出的是嵌套的三个数组:第一个中括号表示这是一个图像里的内容,第二个中括号代表一行的所有像素,第三个中括号代表单个像素的RGB值。
import cv2
img = cv2.imread('1.jpg')
print(img.shape)
运行后得到如下结果:
这表明,变量“img”高1600像素,宽1072像素,每个像素有三个用来表示颜色的RGB值。
注意:1)图片路径中不能有中文,否则会报错
2)如果图片文件与.py文件在一个文件夹里,则只需输入图片名字,如果不在,则需要输入相对路径
3)图片的后缀格式要打对,否则无法打开
4)中括号里显示的三个数字并不是按R、G、B的顺序,而是B、G、R
import cv2
img = cv2.imread('1.jpg')
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
这里,我们使用“imread”函数来显示图像,它需要两个参数,第一个字符串将是显示图片窗口的名称,第二个是要显示的图像。
“waitKey”函数是等待一段时间。当然这里也可以填零,填零的意思是这里会一直等下去,除非用户按下键盘上任意一个按键再执行下一行。
“destroyAllWindows”函数,字面意思就是摧毁所创建的窗口,关闭显示的图像。
这段代码编译运行之后,我们将得到一个名为“image”的图像窗口:
此时按下任意按键即可关闭该窗口。
灰度数字图像是每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度。在之后的opencv实战中,我们会使用到灰度图,所以需要将图片读取为灰度图像。
import cv2
img = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE)
print(img)
这里,代码与上面的唯一的不同就是在“imread”函数里多给了一个参数:“cv2.IMREAD_GRAYSCALE”,这表明我们将会把图片读取为灰度图。
运行得到如下结果:
可以看到,第一个和第二个花括号还在,表达的意思也没有变,而方才第三个中括号括住的三个RGB值则被替换成了一个表示像素亮度的灰度值。
import cv2
img = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE)
print(img,shape)
这时我们再显示shape,可以看到结果中只包含图像的长与宽,而没有第三个数字了。
import cv2
img = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
如果我们这时再显示图像,就能看到灰白的图片:
import cv2
img = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE)
cv2.imwrite('2.png',img)
使用“imwrite”函数,即可在代码所在文件夹保存指定的图像。这里的文件类型也是可以改变的。
这样,我们就把刚才读取的灰度图以png格式保存了下来。