导读
OpenCV功能越发强大,不学一下怎么行?
今天要分享这篇文章带我们一起了解图像的存储和窗口的操作。让我们走进这篇文章,一起来了解一下吧!
如果你有什么问题,或者有什么想法,欢迎评论与我一起沟通交流。如果你想了解更多有关于计算机视觉、OpenCV、机器学习、深度学习等相关技术的内容,想与更多大佬一起沟通,那就加群:326866692 或者扫描下方二维码加入我们吧!
1 窗口操作
1 理论讲解
在前面一节,我们讲到我们要读取并显示图像。大家会发现当我显示图像的时候,就会生成一个窗口来显示图像。当我们停止程序的时候,窗口就会关闭。这些操作都是默认的,系统会自动帮你创建、删除窗口。
但是有的时候,我们需要自己创建窗口,然后对窗口进行一系列操作,有些时候,默认创建与关闭窗口已经不能满足我们的要求了。
所以在这里,我们要讲解创建窗口与关闭窗口操作。
2 API介绍
创建窗口的API是namedWindow,该API实现的功能是:
创建一个窗口,可以用作图像和轨迹栏的占位符。创建的窗口通过它们的名称来引用。至于轨迹栏是干嘛的不急,后面我们会讲到。
API定义如下:
def namedWindow(winname, flags=None)
API的参数含义如下:
(1)winname:创建的窗口名称
(2)flags:创建的窗口类型,默认是None
对于第二个参数,它可取值如下:
WINDOW_NORMAL = 0
WINDOW_AUTOSIZE = 1
WINDOW_FULLSCREEN = 1
WINDOW_OPENGL = 4096
WINDOW_FREERATIO = 256
WINDOW_KEEPRATIO = 0
WINDOW_GUI_EXPANDED = 0
WINDOW_GUI_NORMAL = 16
其含义如下:
(1)WINDOW_NORMAL:可以用户自己调整窗口大小;
(2)WINDOW_AUTOSIZE:自动调整到显示图像的大小;
(3)WINDOW_FULLSCREEN:将窗口更改为全屏;
(4)WINDOW_OPENGL:支持opengl的窗口;
(5)WINDOW_FREERATIO:图像尽可能地扩展(没有比例约束);
(6)WINDOW_KEEPRATIO:保持图像比例扩展;
(7)WINDOW_GUI_EXPANDED:新的增强的GUI;
(8)WINDOW_GUI_NORMAL:绘制窗口的旧方法;
一般来说,我们做完操作,会关闭掉所有窗口,关闭所有窗口的API是destroyAllWindows,该API实现的功能是:
销毁所有创建的窗口。
API定义如下:
def destroyAllWindows()
有时候,我们只需要关闭指定的窗口,关闭指定窗口的API是destroyWindow,该API实现的功能是:
销毁指定的窗口。
API定义如下:
def destroyWindow(winname)
API的参数含义如下:
winname:要被关闭的窗口
3 代码示例
讲完理论和API,我们举个例子。
# coding=utf-8
import cv.cv2 as cv
img = cv.imread('./image/sign.png') # 默认方式
# 窗口的创建与关闭
WindowsName = 'input image'
cv.namedWindow(WindowsName, cv.WINDOW_NORMAL)
cv.imshow(WindowsName, img)
cv.imshow("sign", img)
cv.waitKey(0)
cv.destroyWindow(WindowsName)
cv.destroyAllWindows()
2 保存图像
1 理论讲解
对图像来说,我们必备的操作是加载图像和显示图像,有时候,还需要将图像保存下来,方便我们以后操作。
保存图像,就是将图像保存到本地。
2 API介绍
保存图像的API是imwrite,该API实现的功能是:
将图像保存到指定文件。图像格式是根据文件扩展名选择的。
图像能够保存的文件名类型和能够读取的文件名类型是相同的,一般来说,我们支持如下几个格式:
(1)Windows位图,\*.bmp,\*.dib
(2)JPEG文件,\*.JPEG、\*.jpg、\*.jpe
(3)JPEG 2000文件,\*.jp2
(4)便携式网络图形,\*.png
(5)WebP,\*.webp
(6)Sun rasters, \*.sr, \*.ras
(7)TIFF文件,\*.TIFF,\*.tif
(8)OpenEXR图像文件,\*.exr
(9)Radiance HDR,\*.HDR,\*.pic
(10)GDAL支持的栅格和矢量地理空间数据
API定义如下:
def imwrite(filename, img, params=None)
API的参数含义如下:
(1)filename:要保存的文件名,可以包括路径
(2)img:要保存的图像
(3)params:格式化编码为成对的特定参数
对于第三个参数,可选的值如下:
IMWRITE_EXR_TYPE = 48
IMWRITE_EXR_TYPE_FLOAT = 2
IMWRITE_EXR_TYPE_HALF = 1
IMWRITE_JPEG2000_COMPRESSION_X1000 = 272
IMWRITE_JPEG_CHROMA_QUALITY = 6
IMWRITE_JPEG_LUMA_QUALITY = 5
IMWRITE_JPEG_OPTIMIZE = 3
IMWRITE_JPEG_PROGRESSIVE = 2
IMWRITE_JPEG_QUALITY = 1
IMWRITE_JPEG_RST_INTERVAL = 4
IMWRITE_PAM_FORMAT_BLACKANDWHITE = 1
IMWRITE_PAM_FORMAT_GRAYSCALE = 2
IMWRITE_PAM_FORMAT_GRAYSCALE_ALPHA = 3
IMWRITE_PAM_FORMAT_NULL = 0
IMWRITE_PAM_FORMAT_RGB = 4
IMWRITE_PAM_FORMAT_RGB_ALPHA = 5
IMWRITE_PAM_TUPLETYPE = 128
IMWRITE_PNG_BILEVEL = 18
IMWRITE_PNG_COMPRESSION = 16
IMWRITE_PNG_STRATEGY = 17
IMWRITE_PNG_STRATEGY_DEFAULT = 0
IMWRITE_PNG_STRATEGY_FILTERED = 1
IMWRITE_PNG_STRATEGY_FIXED = 4
IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY = 2
IMWRITE_PNG_STRATEGY_RLE = 3
IMWRITE_PXM_BINARY = 32
IMWRITE_TIFF_COMPRESSION = 259
IMWRITE_TIFF_RESUNIT = 256
IMWRITE_TIFF_XDPI = 257
IMWRITE_TIFF_YDPI = 258
IMWRITE_WEBP_QUALITY = 64
相关含义如下:
这些我们初学不用深究,一般来说,这个参数,我们直接默认即可。
3 代码示例
我们读取一张图片并保存一下:
# coding=utf-8
import cv.cv2 as cv
img = cv.imread('./image/sign.png') # 默认方式
# 保存图片
cv.imwrite("./image/sign1.jpg", img)
执行结果,我们可以看我们保存的路径下:
说在后面的话
这篇文章到这里就要结束啦,内容比较简单,希望大家能够通过这篇文章,能够了解窗口的创建与关闭,掌握存储图像的方法,让我们在后续的课程中,再接再厉,学习更多知识吧。