opencv-python imread、imshow浏览目录下的图片文件
☞ ░ 前往老猿Python博文目录 ░
一、几个知识点
1.1、使用Python查找目录下的文件
具体请参考《Python正则表达式re模块和os模块实现文件搜索模式匹配》。
1.2、opencv waitkey函数
调用语法:int waitKey(int milltimes)
是在一个给定的时间内(单位ms)等待用户按键事件的函数, 如果用户按下按键则返回对应按键的值,否则超时返回。
说明:
- 参数milltimes为0表示没有设置超时时间,则一直等待用户按键
- 如果是超时返回,据说返回值为-1,但老猿验证是255
- 如果操作系统是64位操作系统,返回值需要和0xFF进行与运算确保在一个字节的整数范围内;
- 经老猿验证测试如果按键为光标键,或F1-F10等,返回值为0,因此不能识别这些键,但可以识别Esc键(键值27);
- waitkey返回值为ASCII码值,因此注意输入时中文输入法需要关闭。
1.3、imread读入图像函数
语法:imread(filename,mode)
参数说明
- filename:图像文件名,不同操作系统支撑的文件类型不一样,但都支持bmp图像文件,另外可能还包括jpeg、png、tiff等格式文件
- mode:文件读入模式,常用有三种取值
- cv.IMREAD_COLOR: 对应值为1,加载彩色图像。任何图像的透明度都会被忽视。它是默认标志。
- cv.IMREAD_GRAYSCALE:对应值为0,以灰度模式加载图
- 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 w
def 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 = 0
ch = None
filecount=len(picFiles)
if not filecount:
print(f"目录{directory}无对应文件")
w.Beep(360,100)
return
while ch!=27:
bBeep = False
showDirsPic(directory+'\\'+picFiles[index])
ch = cv.waitKey(30000)
print(ch)
ch &= 0xFF
print(ord('<') ,ord(','),ord('>') ,ord('.'))
if ch==ord('<') or ch==ord(',') :
if index: index -= 1
else:bBeep = True
elif ch==ord('>') or ch==ord('.') :
if index<(filecount-1): index += 1
else: bBeep = True
elif ch==255:
if index<(filecount-1): index += 1
else: index = 0
else:bBeep = True
print("index=",index,picFiles[index])
if bBeep:
print("请使用小于号或逗号看前一张图片,使用大于号或小数点看后一张图片,按Esc键退出")
w.Beep(360,100)
else:
if index > (filecount - 1):index=0
cv.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博文目录 ░
opencv-python imread、imshow浏览目录下的图片文件的更多相关文章
- Python:遍历一个目录下所有的文件及文件夹,然后计算每个文件的字符和line的小程序
编写了一个遍历一个目录下所有的文件及文件夹,然后计算每个文件的字符和line的小程序,先把程序贴出来. #coding=utf-8 ''' Created on 2014年7月14日 @author: ...
- Python —— 批量替换指定目录下的所有文件中指定字符串
参考:http://blog.csdn.net/zcwfengbingdongguke/article/details/13951527 代码: #!/usr/bin/python import os ...
- python之查询指定目录下的最新文件
使用os模块查询指定目录下的最新文件 import os # 输入目录路径,输出最新文件完整路径 def find_new_file(dir): '''查找目录下最新的文件''' file_lists ...
- python实例31[列出目录下所有的文件到txt]
代码: (使用os.listdir) import os def ListFilesToTxt(dir,file,wildcard,recursion): exts = wildcard.sp ...
- python实现查看目录下重复的文件
该python 脚本有以下三个功能: 1. 实现查看目录下重复的文件,输出文件按修改时间升序排列 2. 将按修改时间排列比较旧的.可删除的文件列出来 3. 按目录对重复文件进行统计,比如,目录/tmp ...
- Python读取一个目录下的所有文件
#!/usr/bin/python # -*- coding:utf8 -*- import os allFileNum = 0 def printPath(level, path): global ...
- python 删除一个目录下的所有文件
一个目录下有文件,文件夹,文件夹里又有文件.文件夹....用python脚本,实现,递归删除一个目录下的所有文件: 目录结构如下: 其中我们要删除所有文件 代码实现如下: import os CUR_ ...
- python引入同一目录下的py文件
python引入同一目录下的py文件 注意:python2和python3的包内import语法有区别,下面介绍一下python3的包内import语法 例如在admin.py文件中要引入dealco ...
- python移动目录下所有子目录文件到新的总目录
python移动目录下所有子目录文件到新的总目录 import os import shutil def file(p): p=p z=os.listdir(p) for i ...
随机推荐
- .NET redis 客户端开源组件 FreeRedis (继 CSRedisCore 之后重写)
什么是 FreeRedis FreeRedis 是一款 .NET redis 客户端开源组件,以 MIT 协议开源托管于 github,目前支持 .NET 5..NETCore 2.1+..NETFr ...
- first day for my bolg
做为一名毕业不久的兢兢业业的前端小白,傻到一直用word做笔记,还有各种手抄(捂脸),下定决心以后改用博客,据说大神们都是这么做的!嘿嘿,先把各种笔记腾上来,内容实在惨不忍睹各种智商感人,希望不要有人 ...
- CSS兼容性总结一点点
CSS3的兼容性,除了前缀.还有参数格式的区分,因为仍在变化中,不在这篇文章中讨论. 很想总结一下IE 6 7 8 9 10的兼容性问题,但是我实在不喜欢IE 6 7 8,在Web开发上也很少再调整到 ...
- 绝对定位元素left、right、top、bottom值与其margin和宽高的关系
绝对定位元素(position: absolute)在其相对定位元素(即文档流中最近的非静态定位祖先元素)中,定位祖先元素的宽度为W,垂直高度为H,则存在以下关系: 元素水平方向 width + le ...
- java多线程---张孝祥
1.java web 中,一次http请求是一个任务,因为服务器里面有线程池的,存在一个线程处理多个请求任务. 2.在java中,vector,hashtable,concurrentHashMap是 ...
- mysql mybatis Date java时间和写入数据库时间不符差一秒问题
1,java的数据库实体定义 private Timestamp createTime:2,非常重要!ddl语句建表字段的单位 datetime要手动设置保留3位毫秒数,不然就四舍五入了! ALTER ...
- bluestore的osd自启动
前言 自启动相关的文章很多,有分析的很详细的文章,这里就不做赘述,本篇讲述的是什么情况下用,怎么用的问题 使用场景 一台机器的系统盘坏了,需要重装系统,相关的一些信息没有了,但是上面的数据盘还是在的, ...
- 06 Vue路由简介,原理,实现及嵌套路由,动态路由
路由概念 路由的本质就是一种对应关系,比如说我们在url地址中输入我们要访问的url地址之后,浏览器要去请求这个url地址对应的资源. 那么url地址和真实的资源之间就有一种对应的关系,就是路由. 路 ...
- Python _PyQt5对话框
Python 调用PyQt5 制作对话框,退出时候有二次确认(注:默认是直接退出) 1 # -*- ytf-8 -*- 2 """ 3 用PyQt建一个对话框,退出时提示 ...
- Linux_Python版本控制
第1步:更新gcc,因为gcc版本太老会导致新版本python包编译不成功 复制代码代码如下: yum -y install gcc 系统会自动下载并安装或更新,等它自己结束 第2步:安装wget,这 ...