0
点赞
收藏
分享

微信扫一扫

【OpenCV教程】03 图像的存储与窗口操作


导读

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


相关含义如下:


【OpenCV教程】03 图像的存储与窗口操作_文件名


这些我们初学不用深究,一般来说,这个参数,我们直接默认即可。

3 代码示例

我们读取一张图片并保存一下:


# coding=utf-8
import cv.cv2 as cv


img = cv.imread('./image/sign.png') # 默认方式


# 保存图片
cv.imwrite("./image/sign1.jpg", img)


执行结果,我们可以看我们保存的路径下:


【OpenCV教程】03 图像的存储与窗口操作_代码示例_02


说在后面的话

这篇文章到这里就要结束啦,内容比较简单,希望大家能够通过这篇文章,能够了解窗口的创建与关闭,掌握存储图像的方法,让我们在后续的课程中,再接再厉,学习更多知识吧。



【OpenCV教程】03 图像的存储与窗口操作_代码示例_03




举报

相关推荐

0 条评论