python3+OpenCV批处理图片

python版本是3.6

OpenCV是3.4.1

OpenCV在读取图片方面使用很方便,主要会用到imread()、imwrite()、imdecode()、imencode()

代码如下

import cv2
import os
def Image_Resize(dir):     #输入起始路径
    for parent,dirnames,filenames in os.walk(dir):       # 三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
	    for filename in filenames:
		    img_path=os.path.join(parent,filename)    #os.path.join(a,b) 合并路径
			save_path=os.path.join('   ',filename)    #以原名称存在某一位置
			img=cv2.imread(img_path)
			dim=(256,256)     #规定像素大小
			resized=cv2.resize(img,dim,interpolation = cv2.INTER_AREA) #采用的差值方法是INTER_LINEAR
			cv2.imwrite(save_path,resized)
Image_Resize('  ')
以上是使用imread 和imwrite进行批处理图片的大小,但是要注意,这两个函数无法处理路径中含有中文的图片,而且opencv在读取图片时不会报错,只会使得读

入得数据为none。

在处理含有中文路径的图片时,应采用imdecode(解码)和imencode(编码)

代码如下:

import os
import cv2 as cv2
import numpy as np
def cv_imread(file_path):           #为了方便,把它又定义成了了一个函数,方便调用
    cv_img=cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)
    return cv_img
def img_resize(filepath):  
    for parent, dirnames, filenames in os.walk(filepath):  # 三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字  
        for filename in filenames:
            img_path =os.path.join(parent,filename)   #将父目录和名字组合到一起形成访问路径
            savepaths=os.path.join('D:/NEW_DATA1',filename)			
            img=cv_imread(img_path) # 读取图片  
            res=cv2.resize(img,(128,64),interpolation=cv2.INTER_AREA ) #改变图片尺寸  
            cv2.imencode('.jpg',res)[1].tofile(savepaths) 
img_resize('D:/rest_picture')

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Python 的 Tkinter 模块和 OpenCV 库来实现这个功能。下面是一个简单的示例代码: ```python import tkinter as tk import cv2 import os class ImageBatchProcessingApp(tk.Frame): def __init__(self, master=None): super().__init__(master) self.master = master self.pack() self.create_widgets() def create_widgets(self): self.select_dir_btn = tk.Button(self, text="Select Directory", command=self.select_dir) self.select_dir_btn.pack() self.process_btn = tk.Button(self, text="Process Images", command=self.process_images) self.process_btn.pack() self.quit_btn = tk.Button(self, text="Quit", command=self.master.destroy) self.quit_btn.pack() self.image_listbox = tk.Listbox(self) self.image_listbox.pack() def select_dir(self): self.dir_path = tk.filedialog.askdirectory() self.image_listbox.delete(0, tk.END) for filename in os.listdir(self.dir_path): if filename.endswith(".jpg") or filename.endswith(".png"): self.image_listbox.insert(tk.END, filename) def process_images(self): for filename in self.image_listbox.get(0, tk.END): image_path = os.path.join(self.dir_path, filename) img = cv2.imread(image_path) # 在这里做批处理 # ... # 显示图片到界面上 img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img = Image.fromarray(img) img = ImageTk.PhotoImage(img) self.image_listbox.itemconfig(self.image_listbox.get(0, tk.END).index(filename), image=img) root = tk.Tk() app = ImageBatchProcessingApp(master=root) app.mainloop() ``` 在这个示例代码中,我们创建了一个名为 `ImageBatchProcessingApp` 的 Tkinter 应用程序,该应用程序包含三个按钮和一个列表框。单击 `Select Directory` 按钮可以选择要批处理的图像所在的文件夹,并将文件夹中的所有图像文件名显示在列表框中。单击 `Process Images` 按钮可以对列表框中选定的所有图像进行批处理,并将处理后的图像显示在列表框中的对应项中。 要实现批处理功能,你需要在 `process_images` 方法中添加你的代码。例如,你可以使用 OpenCV 来对图像进行缩放、裁剪、旋转、滤波等操作。在将处理后的图像显示到界面上时,我们需要将 OpenCV 的 BGR 格式转换为 RGB 格式,并使用 PIL 和 Tkinter 提供的 `Image` 和 `ImageTk` 类将其转换为可显示的图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值