OpenCV:创建窗口,图片显示和保存

目录

cv2.waitKey()

窗口创建:cv2.namedWindow()

窗口大小调整:cv2.resizeWindow()

窗口显示:cv2.imshow()

关闭窗口:cv2.destroyAllWindows()

图片读取:cv2.imread()

图片保存:cv2.imwrite()

代码示例


cv2.waitKey()

int waitKey(int delay=0)

waitKey()的基本逻辑:他会在一定时间内等待接收键盘的一个值;返回值为键盘按键的ASCII值;delay表示等待时间(ms)。

若delay<=0,则表示程序会无限制的等待用户的按键事件。

若等待期间没有按键输入,则返回 -1 。

常见:cv2.waitKey(1000) & 0xFF == ord(‘q’) 

解释:ord('q') :返回q的ascii码,waitKey返回值的范围为(0-255),通过  cv2.waitKey(1) & 0xFF 可以将值限定在(0-255)避免程序出现奇怪的BUG。

常用案例:

key = cv2.waitKey(0)
if key & 0xFF == ord('q'):
    exit()

窗口创建:cv2.namedWindow()

void nameWindow(const string& winname,int flags = WINDOW_AUTOSIZE)

winname:窗口名字;flags:窗口标识,默认为WINDOW_AUTOSIZE。

flags

作用
WINDOW_NORMAL 显示图像后,允许用户随意调整窗口大小
WINDOW_AUTOSIZE 根据图像大小显示窗口,不允许用户调整大小
WINDOW_FREERATIO 窗口大小自适应比例
WINDOW_KEEPRATIO 保持图像的比例

窗口大小调整:cv2.resizeWindow()

用法:cv2.resizeWindow(window_name, width, height)

不返回任何值;

  • window_name: 将显示图像/视频的窗口的名称
  • width:                新窗口宽度(整数类型)
  • height:               新窗口高度(整数类型)

窗口显示:cv2.imshow()

cv2.imshow(winname, img)

winname:一个字符串,代表要在其中显示图像的窗口的名称。
img:它是要显示的图像。

它不返回任何值。显示时会将像数值范围映射至 [0,255] 。


关闭窗口:cv2.destroyAllWindows()

        You can call destroyWindow() or destroyAllWindows() to close the window and de-allocate any associated memory usage. For a simple program, you do not really have to call these functions because all the resources and windows of the application are closed automatically by the operating system upon exit.
        

        您可以调用destroyWindow()或destroyAllWindows()来关闭窗口并取消分配任何相关的内存使用。对于一个简单的程序,实际上不必调用这些函数,因为退出时操作系统会自动关闭应用程序的所有资源和窗口

void destroyWindow(const string& winname);

winname:需要关闭的窗口的名称


图片读取:cv2.imread()

imread(const string& filename, int flags = IMREAD_COLOR)

返回值:mat格式,返回读取的图片。

参数1 filename:读取的图片文件名,可以使用相对路径或者绝对路径,但必须带完整的文件扩展名(图片格式后缀)。

参数2 flags:一个读取标记,用于选择读取图片的方式,默认值为IMREAD_COLOR,flag值的设定与用什么颜色格式读取图片有关。

flags 说明
IMREAD_UNCHANGED 如果设置,则按原样返回加载的图像(使用Alpha通道,否则会被裁剪)
IMREAD_GRAYSCALE 如果设置,则始终将图像转换为单通道灰度图像(编解码器内部转换)。
IMREAD_COLOR 如果设置,请始终将图像转换为3通道BGR彩色图像。
IMREAD_ANYDEPTH 如果设置,则在输入具有相应深度时返回16位/ 32位图像,否则将其转换为8位。
IMREAD_ANYCOLOR 如果设置,则以任何可能的颜色格式读取图像。
IMREAD_LOAD_GDAL 如果设置,使用gdal驱动程序加载图像
IMREAD_REDUCED_GRAYSCALE_2 如果设置,则始终将图像转换为单通道灰度图像,图像尺寸减小1/2。
IMREAD_REDUCED_COLOR_2 如果设置,则始终将图像转换为3通道BGR彩色图像,图像尺寸减小1/2。
IMREAD_REDUCED_GRAYSCALE_4 如果设置,则始终将图像转换为单通道灰度图像,图像尺寸减小1/4
IMREAD_REDUCED_COLOR_4 如果设置,则始终将图像转换为3通道BGR彩色图像,图像尺寸减小1/4
IMREAD_REDUCED_GRAYSCALE_8 如果设置,则始终将图像转换为单通道灰度图像,图像尺寸减小1/8。
IMREAD_REDUCED_COLOR_8 如果设置,则始终将图像转换为3通道BGR彩色图像,图像尺寸减小1/8。
IMRED_IGNORE_ORIENTATION 如果设置,请不要根据EXIF的方向标志旋转图像。

图片保存:cv2.imwrite()

cv2.imwrite(filename,img,params)

filename:图片保存的地址,包括图片文件名及后缀。

img:要保存的图像数组。

imwrite函数是基于文件扩展名选择图像的格式。通常,使用此功能只能保存8位单通道或3通道(带有BGR通道顺序)图像,但有以下例外:

▶对于PNG,JPEG2000和TIFF格式,可以保存16位无符号(CV_16U)图像。


▶32位浮点(CV_32F)图像可以保存为PFM,TIFF,OpenEXR和Radiance HDR格式; 使用LogLuv高动态范围编码(每像素4个字节)保存3通道(CV_32FC3)TIFF图像。


▶可以使用此功能保存带有Alpha通道的PNG图像。为此,创建8位(或16位)4通道图像BGRA,其中alpha通道最后。完全透明的像素应该将alpha设置为0,完全不透明的像素应该将alpha设置为255/65535。

如果格式,深度或通道顺序不同,请在保存之前使用Mat :: convertTo和cv :: cvtColor进行转换。或者,使用通用FileStorage I / O函数将图像保存为XML或YAML格式。

params:以特定格式保存图片。

cv2.CV_IMWRITE_JPEG_QUALITY:设置 .jpeg/.jpg 格式的图片质量,取值为 0-100(默认值 95),数值越大则图片质量越高;


cv2.CV_IMWRITE_WEBP_QUALITY:设置 .webp 格式的图片质量,取值为 0-100;


cv2.CV_IMWRITE_PNG_COMPRESSION:设置 .png 格式图片的压缩比,取值为 0-9(默认值 3),数值越大则压缩比越大。

返回值:保存成功返回 True,否则返回 False。


代码示例

import cv2
# 读取图片 211*400
img = cv2.imread('D:\Tom.jpg', flags = cv2.IMREAD_COLOR)
# 创建窗口,命名为Demo
cv2.namedWindow('Demo', cv2.WINDOW_NORMAL)
# 调整窗口大小w
cv2.resizeWindow('Demo', 422, 800)
while 1:
    # 在窗口内显示图片
    cv2.imshow('Demo', img)
    # 等待按键结束窗口
    key = cv2.waitKey(0)
    # 按 q 退出程序
    if key & 0xFF == ord('q'):
        break
    # 按 s 保存图片
    elif key & 0xFF == ord('s'):
        cv2.imwrite('D:\Demo.jpg', img)
#关闭所有窗口,释放资源
cv2.destroyAllWindows()


参考:

cv2.waitKey()_长 青的博客-CSDN博客

cv2.waitKey的入门级理解_山上有强强的博客-CSDN博客

python cv2.waitKey()函数_漫天丶飞雪的博客-CSDN博客

3-2 如何通过OpenCV创建显示窗口_哔哩哔哩_bilibili

opencv中namedWindow( )函数用法总结(02)tu_洛克家族的博客-CSDN博客

OpenCV中namedWindow()函数使用_opencv銝要amedwindow_郑德帅的博客-CSDN博客

【OpenCV 例程300篇】03. 图像的显示(cv2.imshow)_youcans_的博客-CSDN博客

OpenCV中的destroyallWindows的作用_hanjie-chen的博客-CSDN博客

Python OpenCV resizeWindow()用法及代码示例 - 纯净天空

https://www.cnblogs.com/mangoroom/archive/2019/06/10/10999151.html

cv.imread()函数_幼稚园的扛把子~的博客-CSDN博客

【OpenCV 例程300篇】02. 图像的保存(cv2.imwrite)_youcans_的博客-CSDN博客

python-opencv第二期:imwrite函数详解_cv2.imwrite_Kamen Black君的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/adsdasdasdahj/article/details/129963385