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

这篇具有很好参考价值的文章主要介绍了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,机器视觉,opencv,计算机视觉,python


参考:

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博客文章来源地址https://www.toymoban.com/news/detail-803488.html

到了这里,关于OpenCV:创建窗口,图片显示和保存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python中图片读取和保存以及plt.imshow()与cv2.imshow()显示图像颜色错误解决方案

    最近调试程序的时候,发现要保存的图片颜色与原图片有色差(显示图像变蓝),郁闷良久,终于发现问题,望诸君避坑。 🧸在用plt.imshow和cv2.imshow显示同一幅图时可能会出现颜色差别很大的现象。 🎯原因:opencv的接口使用BGR,而matplotlib.pyplot 则是RGB模式。 单独使用图像是

    2024年02月11日
    浏览(38)
  • cv2保存图片类型错误执行报错cv2. error: OpenCV(4.6.0) :-1: error: (-5:Bad argument) in function ‘imwrite‘ - img i

    硬件环境(Ascend/GPU/CPU): GPU 软件环境: – MindSpore 版本: 1.7.0 执行模式: 静态图(GRAPH) – Python 版本: 3.7.6 – 操作系统平台: linux 将优化好的图像用cv2进行图片保存,由于没有将tensor转换为numpy,导致cv2.imwrite运行失败。 adversarial_tensor, mask_tensor = adversarial.train(attack_method) cv2.imwrit

    2024年02月17日
    浏览(43)
  • cv2 保存图片RGB BGR

    原图: cv2.imrite之后的图: 可以看到前后图片一样,我们都知道cv2 .imread读取进来的图像是BGR格式,而cv2.imrite保存的时候也需要BGR格式,这样保证颜色通道顺序一致。 通常情况下,我们都需要转换成RGB的格式进行后续处理,看下面的例子 而保存的图像却是: 可以看到颜色前

    2024年02月12日
    浏览(36)
  • opencv(4): cv2.imwrite()图像的保存

    语法格式:retval = cv2.imwrite(filename, image [, paras]) 参数说明: filename :代表文件名的字符串。文件名必须包含图像格式,例如.jpg,.png等。 image :图像数据矩阵 paras: 不同编码格式的参数,可选项 cv2.CV_IMWRITE_JPEG_QUALITY :设置 .jpeg/.jpg 格式的图片质量,取值为 0-100(默认值 95)

    2024年02月01日
    浏览(26)
  • (P4)Python plt显示和保存图像(cv2、Image)

    对这篇博客内容的最最简要的总结,便于快速抓要点 以下是一张图中包含多张小图 的三种不同写法的汇总和拆解。 汇总 ⭐ 写法一 写法二 写法三 已知的读取图片方式有两种:cv2、Image,初略讲解如下,有需要更多讲解的再单独整合。 写法一 cv2 参考资料 opencv 因为历史原因

    2024年01月24日
    浏览(33)
  • 解决opencv, cv2.puttext函数无法显示中文字符

    背景: opencv内置的cv2.puttext函数不能显示中文字符,尝试了下列方法: (1)cv2.freetype。没有这个库; (2)opencv无法导入中文字体库; (3)卸载opencv-python,安装opencv-python-headless, opencv- contrib-python 方法: 使用PIL库作为中转 下载中文字体库https://github.com/StellarCN/scp_zh/blob/master/fonts/S

    2024年02月13日
    浏览(33)
  • opencv中调整图像显示框大小,cv2.namedWindow()

    如果要要调整cv2.imshow显示出来的窗口大小, 需要使用 cv2.namedWindow(‘窗口标题’, 默认参数) 参数 cv2.imshow(‘窗口标题’,image),如果前面没有cv2.namedWindow,就自动先执行一个cv2.namedWindow() 窗口默认cv2.WINDOW_AUTOSIZE namedWindow函数的作用是通过指定的名字,创建一个可以作为图像和

    2024年02月16日
    浏览(28)
  • opencv导入图片时,cv2后面无法添加imread的问题的解决方法

    当使用cv2导入图片的时候,发现cv2.imread()被标明高亮,无法使用imread,resize等方法  针对这个问题,解决方法如下: 首先在我们的Python安装路径下面找到cv2(安装anaconda的也是如此,找到相应路径),    在这里可以看到一个.pyd文件,将这个文件直接复制到site-packages路径

    2024年02月11日
    浏览(42)
  • 2.ROS机器视觉——ROS图像(imgmsg)与opencv(cv2)对接

    参考: 古月学院和ROS机器人开发实践 目标 :实现ROS系统读取摄像头的图像,ROS读取的图像数据转化为opencv中的图像,opencv对接受的图像进行处理,最后返回给ROS系统可视化输出。 安装opencv库与相关的接口包 由于我用的ROS-Melodic版本,其中roscore只能在python2中执行,而视觉部

    2024年02月16日
    浏览(30)
  • Opencv显示图片(MFC基于对话框窗口)

    #1.编辑对话框按钮,修改各个按钮窗口ID和绑定变量 picture 控件 “打开图片”按钮控件 #2.编写显示图片函数 void DrawMat(cv::Mat img, UINT nID); .h文件进行声明 .cpp进行定义 #3.定义CString fun_LoadImg();函数 .h文件进行声明 .cpp文件进行定义 #4.双击“打开图片”按钮 系统自动弹出响应函数

    2024年04月15日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包