批量裁剪图片为128x128像素和处理自定义裁剪opencv-python联合处理

批量裁剪图片为128x128像素

处理数据集 和 标签数据集的代码:(主要是对原始数据集裁剪)
处理方式:分别处理
注意修改 输入 输出目录 和 生成的文件名

import os  
import cv2 
# 参考https://www.jb51.net/article/173179.htm
# 遍历指定目录,显示目录下的所有文件名
def CropImage4File(filepath,destpath):
      pathDir = os.listdir(filepath)  # 列出文件路径中的所有路径或文件
      for allDir in pathDir:
            child = os.path.join(filepath, allDir)
            dest = os.path.join(destpath,allDir)
            if os.path.isfile(child):
                 image = cv2.imread(child) 
            sp = image.shape      #获取图像形状:返回【行数值,列数值】列表
            sz1 = sp[0]         #图像的高度(行 范围)
            sz2 = sp[1]         #图像的宽度(列 范围)
              #sz3 = sp[2]        #像素值由【RGB】三原色组成
            a=int(sz1/2-64) # x start
            b=int(sz1/2+64) # x end
            c=int(sz2/2-64) # y start
            d=int(sz2/2+64) # y end
            cropImg = image[a:b,c:d]  #裁剪图像
            cv2.imwrite(dest,cropImg) #写入图像路径       
if __name__ == '__main__':
  filepath = 'W:\\BD\\Netww\\anshi001\\'#源图像
  destpath = 'W:\\BD\\Netww\\huidu001//'# resized images saved here
  CropImage4File(filepath,destpath)
  print("well done !")

效果如图:
在这里插入图片描述
在实际工作中,经常需要根据研究工作要求对图像进行裁剪(Subset Image),按照实际图像分幅裁剪的过程,可以将图像分幅裁剪分为两种类型:规则分幅裁剪(Rectangle Subset),不规则分幅裁剪(Pdygon Subset)。

规则分幅裁剪:裁剪图像的边界范围是一个矩形,通过左上角和右下角两点的坐标,就可以确定图像的裁剪位置,整个裁剪过程比较简单。

不规则分幅裁剪:裁剪图像的边界范围是任意多边形,无法通过左上角和右下角两点的坐标确定裁减位置,而必须事先生成一个完整的闭合多边形区域,可以是一个AOI多边形,也可以是ArcInfo的一个Polygon Coverage,针对不同的情况采用不同的裁剪过程。
处理图像:
批量处理—指定图像位置的裁剪

import cv2
import os
import sys
import time 
def get_img(input_dir):
  img_paths = []
  for (path,dirname,filenames) in os.walk(input_dir):
    for filename in filenames:
      img_paths.append(path+'/'+filename)
  print("img_paths:",img_paths)
  return img_paths
def cut_img(img_paths,output_dir):
  scale = len(img_paths)
  for i,img_path in enumerate(img_paths):
    a = "#"* int(i/1000)
    b = "."*(int(scale/1000)-int(i/1000))
    c = (i/scale)*100
    time.sleep(0.2)
    print('正在处理图像: %s' % img_path.split('/')[-1])
    img = cv2.imread(img_path)
    weight = img.shape[1]
    if weight>1600:           
      cropImg = img[50:200, 700:1500]  # 裁剪【y1,y2:x1,x2】
      #cropImg = cv2.resize(cropImg, None, fx=0.5, fy=0.5,
                 #interpolation=cv2.INTER_CUBIC) #缩小图像
      cv2.imwrite(output_dir + '/' + img_path.split('/')[-1], cropImg)
    else:                    # 卷帘发票
      cropImg_01 = img[30:150, 50:600]
      cv2.imwrite(output_dir + '/'+img_path.split('/')[-1], cropImg_01)
    print('{:^3.3f}%[{}>>{}]'.format(c,a,b))
 
if __name__ == '__main__':
  output_dir = "W:\\BD\\Netww\\huidu002//"      # 保存截取的图像目录
  input_dir = "W:\\BD\\Netww\\anshi001\\"        # 读取图片目录表
  img_paths = get_img(input_dir)
  print('图片获取完成 。。。!')
  cut_img(img_paths,output_dir)

在这里插入图片描述
在这里插入图片描述

参考来源:https://www.jb51.net/article/173179.htm
其他的鼠标自定义裁剪相关:https://www.cnblogs.com/tugenhua0707/p/8859291.html

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海宝7号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值