当前位置: 代码迷 >> 综合 >> opencv-python imread、imshow浏览目录下的图片文件
  详细解决方案

opencv-python imread、imshow浏览目录下的图片文件

热度:29   发布时间:2024-02-11 14:40:14.0

? ? 前往老猿Python博文目录 ?

一、几个知识点

1.1、使用Python查找目录下的文件

具体请参考《Python正则表达式re模块和os模块实现文件搜索模式匹配》。

1.2、opencv waitkey函数

调用语法:int waitKey(int milltimes)

是在一个给定的时间内(单位ms)等待用户按键事件的函数, 如果用户按下按键则返回对应按键的值,否则超时返回。

说明:
  1. 参数milltimes为0表示没有设置超时时间,则一直等待用户按键
  2. 如果是超时返回,据说返回值为-1,但老猿验证是255
  3. 如果操作系统是64位操作系统,返回值需要和0xFF进行与运算确保在一个字节的整数范围内;
  4. 经老猿验证测试如果按键为光标键,或F1-F10等,返回值为0,因此不能识别这些键,但可以识别Esc键(键值27);
  5. waitkey返回值为ASCII码值,因此注意输入时中文输入法需要关闭。

1.3、imread读入图像函数

语法:imread(filename,mode)
参数说明
  • filename:图像文件名,不同操作系统支撑的文件类型不一样,但都支持bmp图像文件,另外可能还包括jpeg、png、tiff等格式文件
  • mode:文件读入模式,常用有三种取值
  1. cv.IMREAD_COLOR: 对应值为1,加载彩色图像。任何图像的透明度都会被忽视。它是默认标志。
  2. cv.IMREAD_GRAYSCALE:对应值为0,以灰度模式加载图
  3. cv.IMREAD_UNCHANGED:对应值为-1,加载图像,包括alpha通道;

注意:除了这三个常用取值,还可以有多个取值,相关取值及含义如下:
在这里插入图片描述

返回值说明

imread返回一个BGR格式的图像对象,其类型为一个numpy数组。

注意:

图片文件名不能是中文名,否则识别会报错。

1.4、imshow显示图像

调用语法:cv.imshow(title,img)
参数说明:
  • title:图像显示窗窗口标题和名字
  • img:图像对象

imread读入的函数使用imshow即可显示,显示可以给显示窗设定标题,这个标题也是显示窗口的名字,标题不同的imshow会显示不同窗口。

imshow的窗口可以通过destroyWindow和destroyAllWindows进行关闭,前者要带窗口的标题,后者是关闭所有由当前程序创建的窗口。

1.5、Beep

这个函数是由win32api模块提供的发出扬声器蜂鸣声函数。

调用语法:Beep(volume,milltimes)

使用参数指定音量发出蜂鸣声milltimes毫秒。

二、实现代码

下面代码读取目录f:\screenpic下的图片文件显示,使用小于号或逗号往前翻、使用大于号和点往后翻,Esc键退出

import cv2 as cv
import win32api as wdef showDirsPic(fname):img = cv.imread(fname,cv.IMREAD_UNCHANGED)title = "Browse Picture Files,Press '<>,.'for forward or backward, Esc to quit"#cv.namedWindow(title)#,cv.WINDOW_NORMAL)cv.imshow(title,img)def browseDirPicFiles(directory):picFiles = getDirFiles(directory, "*.*", extnames="jpg;png;jpeg;bmp;tiff")index = 0ch = Nonefilecount=len(picFiles)if not filecount:print(f"目录{directory}无对应文件")w.Beep(360,100)returnwhile ch!=27:bBeep = FalseshowDirsPic(directory+'\\'+picFiles[index])ch = cv.waitKey(30000)print(ch)ch &= 0xFFprint(ord('<') ,ord(','),ord('>') ,ord('.'))if ch==ord('<') or ch==ord(',') :if index: index -= 1else:bBeep = Trueelif ch==ord('>')  or ch==ord('.') :if index<(filecount-1): index += 1else: bBeep = Trueelif ch==255:if index<(filecount-1): index += 1else: index = 0else:bBeep = Trueprint("index=",index,picFiles[index])if bBeep:print("请使用小于号或逗号看前一张图片,使用大于号或小数点看后一张图片,按Esc键退出")w.Beep(360,100)else:if index > (filecount - 1):index=0cv.destroyAllWindows()#cv.destroyWindow(title)browseDirPicFiles(r"f:\screenpic")

上面代码中的函数getDirFiles实现请参考《Python正则表达式re模块和os模块实现文件搜索模式匹配》。

关于老猿的付费专栏

老猿的付费专栏《使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏加起来只需要19.9元,都适合有一定Python基础但无相关专利知识的小白读者学习。这2个收费专栏都有对应免费专栏,只是收费专栏的文章介绍更具体、内容更深入、案例更多。

收费专栏文章目录:《moviepy音视频开发专栏文章目录》、《使用PyQt开发图形界面Python应用专栏目录》。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python、学5G!

? ? 前往老猿Python博文目录 ?