零基础掌握OpenCV图像处理基本操作
- 前言
- 一、CV2模块
- 二、读取图像 imread()
- 三、显示图像(窗口)
- 3.1 namedWindow ()函数
- 3.2 imshow ()函数
- 3.3 waitKey ()函数
- 3.4 waitKey()实现交互功能
- 四、释放窗口
- 4.1 destroyWindow() 函数
- 4.2 destroyAllWindows() 函数
- 五、保存图像imwrite()
前言
谈到图像识别,我们就不得不提起OpenCV这个库了,OpenCV是一个跨平台计算机视觉和机器学习软件库,可以运行Linux、Windows、Android和Mac OS操作系统上。支持 C++ 、Python、Ruby、MATLAB等语言的接口,能够实现图像处理和计算机视觉方面的很多通用算法。
本篇文章主要介绍一些OpenCV中常用的基本操作,希望和大家一起学习。
一、CV2模块
需要注意的是,在使用OpenCV时,要先导入CV2模块(即 import cv2),大多数常用的OpenCV函数 都在CV2模块内。
在这里要注意CV2和CV代表的意义不同,其实对编程也没太大影响,感兴趣的朋友可以自行查找区别,在这里就不多做叙述了。
导入CV2模块
1. import cv2
二、读取图像 imread()
OpenCV提供了函数cv2.imread()来读取图像,该函数支持各种静态图像格式。cv2.imread()函数默认读取的是一副彩色图片,想要读取灰度图,则需要设置flags参数。该函数的语法格式为:
1. import cv2
2. cv2.imread(filepath,flags)
filepath:要读入图片的完整路径
flags:读入图片的标志 :
cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,对应数值为1
cv2.IMREAD_GRAYSCALE:将读入图片的图片变为单通道的灰度图像,对应数值为0
cv2.IMREAD_UNCHANGED:保持图片原有的格式读入,对应数值为-1
例如,想要读取C:\Users\148675\Desktop\python路径下下文件名为tupian.jpg的图像,并分别按照彩色图片、灰度图片、保持按照原有格式读入,则使用的语句为:
1. import cv2
2. path ="C:\\Users\\148675\\Desktop\\python\\tupian.jpg"
3. cv2.imread(path,1) #读取彩色的图片
4. cv2.imread(path,0) #读取灰度的图片
5. cv2.imread("C:\\Users\\148675\\Desktop\\python\\tupian.jpg",-1) #读取原格式的图片
三、显示图像(窗口)
OpenCV提供了多个与显示有关的函数,下面对常用的几个进行简单介绍。
3.1 namedWindow ()函数
函数cv2.namedWindow()用来创建指定名称的窗口,其语法格式为:
1. cv2.namedWindow( winname )
式中,winname是要创建的窗口的名称。
例如,下列语句会创建一个名为class的窗口 :
1. import cv2
2. cv2.namedWindow("class")
3.2 imshow ()函数
函数cv2.imshow()用来显示图像,其语法格式为:
1. cv2.imshow( winname, mat )
式中:
1.winname是窗口名称
2.mat是要显示的图像
例如 在当前路径下读入一个名为hudie.jpg的图片,并在一个名为tupian的窗口内显示:
1. import cv2
2. lan = cv2.imread("hudie.jpg") #此处默认值为1,可以省略,读入彩色图片
3. cv2.namedwindow("tupian")
4. cv2.imshow("tupian",lan)
5.
6.
7. #这里需要暂停,起到一个延时的作用,不暂停无法正常查看图片
8. cv2.waitKey (0)
在本程序中,首先通过 cv2.imread()函数读取图像 hudie.jpg,接下来通过cv2.namedWindow()函数创建一个名为 tupian 的窗口,最后通过cv2.imshow()函数在窗口 tupian内显示图像 hudie.jpg。
在实际使用中,也可以不使用cv2.namedWindow()创建窗口,直接使用函数cv2.imshow()引用不存在的窗口,并在其中显示指定图像,这样函数cv2.imshow()实际上会完成如下两步操作:
第1步:函数 cv2.imshow()创建一个指定名称的新窗口。
第2步:函数cv2 imshow()将图像显示在刚创建的窗口内。
例如,在下面的语句中,函数cv2.imshow()完成了创建tupian窗口和显示hudie图像的作用,该语句的功能刚才的相同。
1. import cv2
2. lan = cv2.imread("hudie.jpg")
3. cv2.imshow("tupian",lan)
3.3 waitKey ()函数
函数 cv2.waitKey() 用来等待按键,当用户按下键盘后,该语句会被执行,并获取返回值。
其语法格式为:
1. return = cv2.waitKey(delay)
式中
1.return 表示返回值,如果没有按键被按下,则返回-1;如果有按键被按下,则返回该按键的ASCII码
2.delay 表示等付键盘触发的时间,单位是 ms 当该值是负数或者零时,表示无限等待, 该值的默认值为0
在实际使用中,可以通过函数 cv2.waitKey()获取按下的按键,并针对不同的键做出不同的反应,从而实现交互功能。
例如,如果按下A键,则关闭窗口 如果按下B键,则生成一个窗口副本。
3.4 waitKey()实现交互功能
例如,在一个窗口内显示图像,并针对按下的不同按键(A按键和Q按键)做出不同的反应:
1. import cv2
2. lan=cv2.imread("hudie.jpg")
3. cv2.imshow("tupian", lan )
4. key = cv2.waitKey()
5. if key == ord('A'):
6. cv2.imshow("Achuangkou",lan)
7. if key == ord('Q'):
8. cv2.imshow("Qchuangkou",lan)
运行上述程序,按下键盘上的A 键或者Q键,会在一个新的窗口内显示图像 hudie.jpg
但它们的不同之处在于:
如果按下的是键盘上的A键,则新出现的窗口名称为Achuangkou
如果按下的是键盘上的Q键,则新出现的窗口名称为Qchuangkou
1.如果参数 delay 的值为 0,则程序会一直等待。直到有按下键盘按键的事件发生时,才会执行后续程序
2.如果参数 delay 的值为一个正数,则在这段时间内,程序等待按下键盘按键,当有按下键盘按键的事件发生时,就继续执行后续程序语句:如果在 delay 参数所指定的时间内直没有这样的事件发生,则超过等待时间后,继续执行后续的程序语句
例如,用函数 cv2.waitKey()实现程序暂停,在按下键盘的按键后让程序继续运行:
1. import cv2
2. lan = cv2.imread("hudie.jpg")
3. cv2.imshow("tupian",lan)
4. key = cv2.waitKey()
5.
6. if key != -1:
7. print("触发了按键!")
运行上述程序,首先会在一个名为 tupian的窗口内显示hudie.jpg 图像,在未按下键盘上的按键时,程序没有新的状态出现;当按下键盘上的任意一个按键后,key的返回值不为-1,会在控制台打印“触发了按键”。
在本例中,由于 cv2.waitKey() 函数的参数值是默认值 0,所以在未按下键盘上的技键时程序会一直处于暂停状态,当按下键盘上的任意一个按键时,程序中 key !=cv2.waitKey() 下方的语句便得以执行,程序输出“触发了按键“。
四、释放窗口
4.1 destroyWindow() 函数
函数 cv2.destroyWindow () 用来释放(销毁)指定窗口,其语法格式为:
1. cv2.destroyWindow (winname)
其中, winname 是窗口的名称。
例如,使用函数 cv2.destroyWindow () 释放窗口:
1. import cv2
2. lan = cv2.imread("hudie.jpg")
3. cv2.imshow("tupian",lan)
4. key = cv2.waitKey()
5. cv2.destroyWindow(tupian)
运行上述程序,首先会在一个名为 tupian 的窗口内显示hudie.jpg 图像,在程序运行的过程中,当未按下键盘上的按键时,程序没有新的状态出现:当按下键盘上的任意一个按键后,窗口 tupian会被释放。
4.2 destroyAllWindows() 函数
函数 cv2.destroyAllWindows () 用来释放(销段)所有窗口,其语法格式为:
1. cv2.destroyAllWindows ()
其用法与cv2.destroyWindow() 相似,这里不做过多的解释。
五、保存图像imwrite()
OpenCV 提供了函数 cv2.imwrite(),用来保存图像,该函数的语法格式为:
1. retval = cv2.imwrite( filename , img)
式中:
1.retval 是返回值。如果保存成功,则返回逻辑值真(True);如果保存不成功,则返回逻辑值假( False)
2.filename 是要保存的目标文件的完整路径名,包含文件扩展名
3.img是被保存图像的名称
例如,将读取的图像保存到当前目录下:
1. import cv2
2. lan = cv2.imread("hudie.jpg")
3. retval = imwrite("result.jpg",lan)
上述程序会先读取当前目录下的图像 hudie.jpg,生成它的一个副本图像,然后将该图像以名称 result.jpg 存储到当前目录下。
感谢大家的观看,由于本人是第一次写,所以会存在一些问题不足,希望大家可以提出宝贵的意见,欢迎大家进行留言指正,共同进步!!!