Opencv-Python 图像
目标
在这里你将学会这样读入一副图像,怎么样显示一副图像,以及如何保存一副图像
你将学习如下函数:cv2.imread(), cv2.imshow(), cv2.imwrite()
如果你愿意的话,我会教你如何使用Matplotlib显示一副图片
读入图像
使用函数cv2.imread()读入图像。
第一个参数是这幅图像应该在此程序的工作路径,或者给函数提供完整路径
第二个参数是告诉函数应该如何读取这幅图片
cv2.IMREAD_COLOR:读入一副彩色图像。图像的透明度也会被忽略,这是默认参数
cv2.IMREAD_GRAYSCALE:以灰度模式读入图像
cv2.IMREAD_UNCHANGED:读入一副图像,并且包括图像的alpha通道
import numpy as np import cv2 # cv2.IMREAD_COLOR # 读入一副彩色图像,图像的透明度会被忽略,这是默认参数 -1 # cv2.IMREAD_GRAYSCALE #以灰度模式读入图像 0 # cv2.IMREAD_UNCHANGED #读入一副图像,并且包括图像的alpha通道 1 img = cv2.imread('timg.jpg', 0)
警告: 就算图片的路径是错误的,Opencv也不会提醒你,但是但你使用命令print(img)的时候得到的结果是None.
显示图像
使用函数cv2.imshow()显示图像,窗口会自动调整Wie图像大小,第一个参数是窗口的命令,其次才是我们的图像,你可以创建多个窗口,只要你喜欢,但是必须给他们不同的名字
cv2.imshow('image', img) cv2.waitKey(0) cv2.destroyAllWindows()
展示效果:
cv2.waitKey()是一个键盘绑定函数。需要制定的是它的时间尺度是毫秒级。函数等待特定的几毫秒,看是否有键盘输入。在特定的几毫秒之内,如果按下任意键,这个
函数会返回按键的ASCII码值,程序将会继续运行。如果没有键盘输入,返回值为-1,如果我们设置的这个函数的参数为0,那它将会无限的等待键盘输入。它也可以被
用来检测特定键盘是否被按下。它也可以被用来检测特定键是否被按下,例如按键a是否被按下,后面我们可以接着讨论。
cv2.destoryAllWindows()可以轻易的删除任何我们建立的窗口。如果你想删除特定的窗口可以使用cv2.destoryAllWindow(),在括号内输入你想删除的窗口名。
建议:一种特殊的情况是,你也可以先创建一个窗口,之后再加载图像。这种情况下,你可以决定窗口是否可以调整大小。使用到的函数是cv2.namedWindow().
初始设定函数标签是cv2.WINDOW_AUTOSIE.但是如果你把标签改为cv2.WINDOW_NORMAL,你就可以调整窗口大小了。当图像维度太大,或者要添加轨迹条的时候
调整窗口大小将会很有用。
代码如下:
import cv2 img = cv2.imread('timg.jpg', 0) cv2.namedWindow('image',cv2.WINDOW_NORMAL) cv2.imshow('image', img) cv2.waitKey(0) cv2.destroyWindow('image') # cv2.destroyAllWindows()
保存图像
下面的程序将会加载出来一个灰度图,显示图片, 按下's'键后保存后退出,或者是按下ESC键盘退出不保存
import cv2 img = cv2.imread('timg.jpg', 0) cv2.namedWindow('image',cv2.WINDOW_NORMAL) cv2.imshow('image', img) key = cv2.waitKey() #默认是0,0的话会一直无限等下去; 如果不是0的话,相当于传入等待参数,最多等待多久,毫秒, 例如3000,3秒,如果在3秒内按下键的话,则key就是对应的键ASCII值,否则-1 if key == ord('s'): #等待按下s键 cv2.imwrite('test_back.jpg', img) #保存的图片路径,img对象 cv2.destroyAllWindows() print('按下S键') elif key == 27: #等待按下ESC键 cv2.destroyAllWindows() print('按下ESC键') else: print('其他键') # cv2.destroyWindow('image')
警告:如果你用的是64位系统,你需要将key = cv2.waitKey(0)改为key = cv2.waitKey(0)&OxFF
使用Matplotlib
Matplotlib是Python的一个绘图库,里面有各种各样的绘图方法,之后会陆续了解到。现在,可以学习怎么样用Matplotlib显示图像,你可以放大图像,保存它等。
import cv2 from matplotlib import pyplot as plt img = cv2.imread('timg.jpg', 1) plt.imshow(img, cmap = 'gray', interpolation = 'bicubic') plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis plt.show()
显示如下: