Opencv-Python学习笔记
此文档为本人(初学)主要参考由段力辉翻译的OpenCV-Python中文教程官方教程,并结合多方资料总结成学习笔记,如有侵权请联系本人
第二章 Opencv的GUI特性(1)
2.1 对图片的操作
目标:
- 学会读入图像、显示图像、保存图像
- 学习函数:cv2.imread()、cv2.imshow()、cv2.imwrite()、cv2.waitKey()、cv2.destroyAllWindows()、cv2.destroyWindows()、cv2.namedWindow()
2.1.1 读入图像
函数解析:
- imread(src,flag)——读入图像
src:图片路径
flag:读取图片的方式
• flag = 1 <=> cv2.IMREAD_COLOR:以彩色图像读入,忽略图像透明度,这是默认参数。
• flag = 0 <=> cv2.IMREAD_GRAYSCALE:以灰度模式读入图像
• flag = -1 <=> cv2.IMREAD_UNCHANGED:读入一幅图像,并且包括图像的 alpha通道1。 - imshow(winname,src)——显示图像
winname:窗口名字
src:图片路径 - imwrite(src1,src2)——保存图像
src1:图片保存路径
src2:图片来源路径 - waitKey(delay)——键盘绑定函数,等待特定毫秒后,看键盘是否有输入,返回值为ASCII值。如果参数为0,表示无限期的等待键盘输入
delay:延时的时间,单位ms - destroyAllWindows()——删除建立的全部窗口
- destroyWindow(winname)——删除指定的窗口
winname:指定窗口名 - namedWindow(winname,flag)——新建显示窗口
winname:新建的窗口名称
flag:窗口类型标识
• WINDOW_AUTOSIZE 窗口大小自动适应图片大小,并且不可手动更改
• WINDOW_NORMAL 用户可以改变这个窗口大小(上面图2就是使用的它)
• WINDOW_OPENGL 窗口创建的时候会支持OpenGL2
实战演练:
示例一:
import cv2 as cv
src1 = cv.imread(r"D:\Demons_Working\Image&Video\Image\c.jpg",1)#引号内是你计算机内图片的路径
src2 = cv.imread(r"D:\Demons_Working\Image&Video\Image\c.jpg",0)#r取消转义字符或者使用\\
src3 = cv.imread("D:\\Demons_Working\\Image&Video\\Image\\c.jpg",cv.IMREAD_GRAYSCALE)#flag = 0 等价于 cv.IMREAD_GRAYSCALE
cv.namedWindow("test",cv.WINDOW_AUTOSIZE)#创建一个窗口
cv.imshow("test1",src1)#在窗口test1显示src1
cv.imshow("test2",src2)#在窗口test2显示src2
cv.imshow("test3",src3)#在窗口test3显示src3
cv.waitKey(0)#等待任意键
cv.destroyAllWindows()#关闭所有窗口
显示结果如下:
示例二:
import cv2 as cv
src1 = cv.imread(r"D:\Demons_Working\Image&Video\Image\t.jpg")
src2 = cv.imread(r"D:\Demons_Working\Image&Video\Image\r.jpg")
cv.namedWindow("test4",cv.WINDOW_AUTOSIZE)#自定义窗口大小
cv.namedWindow("test5",cv.WINDOW_NORMAL)
cv.imshow("test4",src1)
cv.imshow("test5",src2)
k = cv.waitKey(0)
if k == 27:
cv.destroyWindow("test4")
if k == ord('s'):
cv.imwrite(r"C:\Users\demons\Pictures\Saved Pictures\save_image.png",src1)
cv.destroyAllWindows()
显示结果如下:
改变图片大小之后
点击”s“保存之后
注意:
- cv2.waitKey() 是一个键盘绑定函数,它的时间尺度是毫秒级。函数等待特定的几毫秒,看是否有键盘输入。特定的几毫秒之内,如果按下任意键,这个函数会返回按键的 ASCII 码值,程序将会继续运行。如果没有键盘输入,返回值为 -1,如果我们设置这个函数的参数为 0,那它将会无限期的等待键盘输入。它也可以被用来检测特定键是否被按下,例如按键 s 被按下,执行保存操作等。
- ord(‘s’)表示输出值是否等于字符‘s’
阿尔法通道(Alpha Channel)是指一张图片的透明和半透明度。例如:一个使用16位存储的图片,可能5位表示红色,5位表示绿色,5位表示蓝色,1位是阿尔法。在这种情况下,它要么表示透明要么不是。一个使用32位存储的图片,每8位表示红绿蓝,和阿尔法通道。在这种情况下,就不光可以表示透明还是不透明,阿尔法通道还可以表示256级的半透明度。 ↩︎
OpenGL(Open Graphics Library),译名:开放图形库或者“开放式图形库”,是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟实境、科学可视化程序和电子游戏开发。 ↩︎