
目录通用步骤自定义保存操作按键分类保存PyCharm 在导入 OpenCV 的包之后最基础的是如何对一个图片进行操作。通用步骤有几部1导包导入 OpenCV 图像处理库cv2 就是它在 Python 里的名字。导入后你就能调用它的功能比如读取图片、截图、做图像识别。2读取图片3判断导入是否成功4输出图片5自定义操作#导包 import cv2 #读取图片 img_pathrC:\Users\Thinkpad\PycharmProjects\PythonProject\dog1.webp #调用功能imread导入图片 imgcv2.imread(img_path) #判断是否导入成功 if img is not None: print(找不到图片请检查图片路径) #输出图片 imshow title_img这是输出图片的名字 任意命名 可以看输出结果展示 cv2.imshow(title_img,img) #cv2.waitKey(0)等待键盘按键0 代表无限等直到你按下任意键图片窗口才关闭。 小提示写图片展示代码时搭配 cv2.imshow() 使用不加这句窗口会一闪而过。 cv2.waitKey(0)输出结果展示好啦准备好了吗现在我们准备做一些自定义操作举个栗子在图片找到之后我们想将这个文件保存到我们自己分类好的文件夹中宠物文件夹中有【猫、狗、小鸡、羊驼、荷兰猪、小仓鼠】狗狗的图片我们准备将这个图片放入宠物文件夹中并命名为“二哈”我们就可以这样做keycv2.waitKey(0) #根据用户按键执行操作 判断键入的值 if keyord(s): #s对应着ASCII码 可以输入115表示小写的s 不过键入s可读性更强 #保存图像 output_pathrC:\Users\Thinkpad\PycharmProjects\PythonProject\.venv\二哈.jpg #调用保存图片函数 cv2.imwrite(output_path,img) print(f图片已保存为:{output_path}) else: #如果按下了其他键 print(图像未保存)看下输出结果能发现一个问题保存进入文件夹之后图片名字不叫“二哈”而是乱码。这是因为 Windows 默认文件系统编码是 GBK而 OpenCV 底层很多版本接收路径的时候默认按 UTF-8 解析。所以 up 主建议优先使用英文命名说到这里有些姥爷问了博主俺就是懒 有很多图片的话不想一次一次的去实现有没有省事的方法有的有的你看你急炸了吧我们接下来开始看一下用什么办法实现 OpenCV 按键分类保存图片。功能目标打开一张图片按下不同按键自动把图片保存到对应的宠物分类文件夹文件夹不存在就自动创建图片自动编号不会覆盖旧图按 q 退出窗口。• 按键 c → 猫 (cat) 文件夹• 按键 d → 狗 (dog) 文件夹• 按键 z → 仓鼠 (hamster) 文件夹• 按键 j → 小鸡 (chicken)• 按键 y → 羊驼 (alpaca)• 按键 h → 荷兰猪 (guinea_pig)• 按键 q → 退出程序用到的技术1. cv2.imshow()弹窗展示图片2. cv2.waitKey(0)等待键盘按下获取按键 ASCII 码3. os.path.join()安全拼接路径Windows、Linux 都兼容避免斜杠写错4. os.makedirs(..., exist_okTrue)创建文件夹文件夹已存在不会报错5. os.listdir()读取文件夹里面所有文件统计 jpg 数量实现图片自增命名6. cv2.imwrite()保存图片来了两个新朋友os.path.join() 以及os.makedirs(..., exist_okTrue)和 os.listdir()咳咳 是三个我当然知道是三个 我就是想看看你们睡着没--。。--他们的能干什么苦力我们等会就知道了 ⭐嘻嘻首先第一步仍然是导包import cv2 #导入 opencv 库用来读图、显示、保存图片import os #操作系统模块用来创建文件夹、读取文件夹里面的文件、拼接路径第二步 配置一个根目录root_dir rC:\Users\Thinkpad\PycharmProjects\PythonProject\.venv\petroot_dir 是我们所有分类子文件夹cat、dog、hamster…的统一 “总仓库”把它单独抽出来写在配置区是工程上的好习惯不是随便写的。r :原始字符串Window路径里的\不会被当成转义符号防止报错所有的分类文件夹 cat、dog 都会自动生成在pet这个文件夹里第三步是搞一个字典为什么搞一个字典呢字典就是专门用来做【按键 → 分类名】这种一一对应的映射关系方便管理、好扩展、代码干净。 女士你也不想你的小手去写一堆的if/else语句吧 丑陋又难以维护。苦活我干 好了先生这是你要的一堆if/elseif key ord(c): folder_name catelif key ord(d): folder_name dogelif key ord(z): folder_name hamsterelif key ord(j): folder_name chickenelif key ord(y): folder_name alpacaelif key ord(h): folder_name guinea_pigelse: print(无效按键)允许我歇几分钟这是我们的字典大人 简单明了class_map { ord(c): cat, ord(d): dog, ord(z): hamster, ord(j): chicken, ord(y): alpaca, ord(h): guinea_pig }if key in class_map: folder_name class_map[key]比如你要加s → sheep 只在字典追加一行ord(s): sheep完事。 如果是 elif 写法你还要多写一整条分支。分类多了差距巨大比如几十类标注。整体代码就是import cv2 import os 1. 配置区我们自己改这里 根目录所有宠物文件夹都放在这个pet文件夹下面 root_dir rC:\Users\Thinkpad\PycharmProjects\PythonProject.venv\pet 按键和分类文件夹的映射字典key按键ASCIIvalue文件夹名字 class_map { ord(c): cat, ord(d): dog, ord(z): hamster, ord(j): chicken, ord(y): alpaca, ord(h): guinea_pig } 读取图片这里你后面可以换成摄像头画面 img cv2.imread(test.jpg) 创建窗口显示图片窗口名字叫 pet_img cv2.imshow(pet_img, img) 2. 循环监听按键 while True: # 等待按键按下之后拿到key的值ASCII码 key cv2.waitKey(0) # 如果按下 q 键退出循环结束程序 if key ord(q): print(退出程序) break 判断按下的键是不是我们上面字典里写好的分类按键 if key in class_map: # 根据按键拿到对应的文件夹名称 folder_name class_map[key] # 拼接完整保存路径根目录 当前分类文件夹 save_folder os.path.join(root_dir, folder_name) # 创建文件夹exist_okTrue文件夹已经存在不报错 os.makedirs(save_folder, exist_okTrue) # 统计这个文件夹里面已经有多少张jpg图片 count 0 for f in os.listdir(save_folder): # 把文件名转小写判断后缀是不是.jpg if f.lower().endswith(.jpg): count 1 # 拼接文件名dog_001.jpg、dog_002.jpg 这种格式 # :03d 代表数字占3位不够前面补0 filename f{folder_name}_{count1:03d}.jpg # 完整保存路径 save_path os.path.join(save_folder, filename) # opencv保存图片 cv2.imwrite(save_path, img) print(f✅ 保存成功{save_path}) else: # 按了c/d/z/j/y/h/q以外的按键 print(❌ 无效按键不保存图片) 循环结束销毁图片窗口 cv2.destroyAllWindows()AI总结本文围绕 OpenCV 图片读取、显示、保存以及文件目录操作梳理了最常用的几个函数回顾要点如下cv2.imread()按路径读取图片返回图像矩阵路径错误或文件损坏时返回None使用前务必先判断。cv2.imshow()在弹窗中展示图片需要配合cv2.waitKey()使用否则窗口会一闪而过。cv2.waitKey()等待键盘输入并返回按键的 ASCII 码参数为 0 表示无限等待是按键交互和分类保存的核心。cv2.imwrite()把图像按指定路径保存到磁盘路径中的目录必须已存在否则保存失败。os.path.join()安全拼接路径自动适配 Windows 和 Linux 的分隔符避免手写斜杠出错。os.makedirs(..., exist_okTrue)递归创建文件夹文件夹已存在时不会报错适合按分类自动建目录。os.listdir()列出文件夹内所有文件名常用来统计已有图片数量实现文件自增编号、避免覆盖。常见报错排查图片路径含中文乱码Windows 默认文件系统编码为 GBK而 OpenCV 部分版本按 UTF-8 解析路径。建议优先使用英文命名确需中文路径时可用cv2.imdecode(np.fromfile(path, dtypenp.uint8), cv2.IMREAD_COLOR)读取保存时用cv2.imencode配合tofile。imread 返回 None检查路径是否写错、文件是否存在、后缀名是否正确路径中不要出现未转义的反斜杠建议使用原始字符串r...同时确认当前工作目录与相对路径的基准一致。窗口一闪而过cv2.imshow()后缺少cv2.waitKey(0)程序执行完立即退出。补上等待按键的语句即可让窗口保持显示。按键无响应确认图片窗口处于激活状态鼠标点一下窗口再按键waitKey()的参数不能省略若在循环中调用注意每次循环都要重新调用waitKey()才能持续接收按键。