一:读入图像
使用函数:cv2.imread(const string&filename,int flags=1)
例:
img= cv2.imread('jieni.jpg',1)
mat:简单介绍,用于保存图像以及其他矩阵数据的数据结构,默认情况下尺寸为0
此代码表示,从工程目录下,把一幅名为jieni.jpg的jpg类型图像载入mat类型的img变量中。
1.const string&filename :字符串形式的文件路径
2.int flags=1:载入标示,指定一个加载图像的类型。共有三种类型,用1(默认参数)、0、-1来表示
其中:1——cv2.imread_color:读入彩色图像,图像透明度会被忽略
0——cv2.imread_grayscale:以灰度模式读入图像
-1——cv2.imread_unchanged :读入一幅图像,并且包括图像的alpha通道
注:1.阿尔法通道(α Channel或Alpha Channel)是指一张图片的透明和半透明度。例如:一个使用每个像素16比特存储的位图,对于图形中的每一个像素而言,可能以5个比特表示红色,5个比特表示绿色,5个比特表示蓝色,最后一个比特是阿尔法。在这种情况下,它要么表示透明要么不是,因为阿尔法比特只有0或1两种不同表示的可能性。又如一个使用32个比特存储的位图,每8个比特表示红绿蓝,和阿尔法通道。在这种情况下,就不光可以表示透明还是不透明,阿尔法通道还可以表示256级的半透明度,因为阿尔法通道有8个比特可以有256种不同的数据表示可能性。
2.图像通道:一幅完整的图像,红色绿色蓝色三个通道缺一不可。即使图像中看起来没有蓝色,只能说蓝色光的亮度均为0或者各像素值的红色和绿色通道不全为0,但不能说没有蓝色通道存在。
二:显示图像
1.函数:cv2.imshow(const string&winname,mat)
2.参数说明:
(1)const string&winname——需要显示的窗口标示名称。
(2)mat——需要显示图像的名称
例:
image = cv2.imread("F:\picture\jienitest.jpg") #读取某张图片
cv2.imshow("Image",image) #将图片展示
cv2.waitKey(0) #等待再按下任何键后执行关闭窗口
cv2.destroyAllWindows()
3.键盘绑定函数:cv2.waitkey()
需要指出的是它的时间尺度是毫秒级。函数等待特定的几毫秒,看是否有键盘输入。特定的几毫秒之内,如果按下任意键,这个函数会返回按键的 ASCII 码值,程序将会继续运行。如果没有键盘输入,返回值为 -1,如果我们设置这个函数的参数为 0,那它将会无限期的等待键盘输入。它也可以被用来检测特定键是否被按下,例如按键 a 是否 按下,这个后面我们会接着讨论。
4.函数cv2.destroyAllWindows()
可以轻易删除任何我们建立的窗口。如果你想删除特定的窗口可以使用cv2.destroyWindow(),在括号内输入你想删除的窗口名。
三:创建窗口
1.函数:cv2.namedWindow(winname,[flags])
2.参数说明:
(1)winname——用作窗口标识符的窗口名称
(2)[flags]——窗口标示,可以填如下几种值
- cv2.WINDOW_NORMAL,用户可以改变窗口的大小(没有限制)
- cv2.WINDOW_AUTOSIZE,窗口可以自动调整以适应所显示的图像,用户不能手动调整
(3)namedWindow作用:当需要显示窗口前就需要用到窗口名时,如创建一个作为图像和进度条的容器窗口。如果具有相同名称的窗口已经存在,则函数不起作用。
四:输出图像到文件中:imwrite()函数
1.函数:cv2.imwrite(filename,img,[params])
2.参数:
(1)filename——文件名
(2)img(mat形式)——图像或者要保存的图像
(3)params——一般不需要填写
例:
cv2.imwrite('messigray.png',img)
五:练习
加载一个灰度图,显示图片,按下’s’键保存后退出,或者按下 ESC 键退出不保存。
import cv2
image=cv2.imread("F:\picture\jienitest.jpg",0)
cv2.imshow("Image",image)
k=cv2.waitKey(0)
if k==27:
cv2.destroyWindow("Image")
elif k==115:
cv2.imwrite("F:\picture\jienitestgray.jpg",image)
cv2.destroyWindow("Image")