批量截图工具

截图工具作用

依次显示一个文件夹中所有的jpg和png文件,通过鼠标选择位置,从每张图中截图得到固定宽度和固定高度的小图,并将小图重命名保存在原图的相同目录。每张大图可以截取多次,可以撤销之前的选择框,使用方法如下:

使用步骤

  1. 修改CutTool.py (后文)中第六行path变量,修改为包含所有未切分的原图的文件夹
  2. 修改第八行和第九行的width和height为切出来的相片的长和宽
  3. 运行CutTool.py
  4. 程序展示图片,使用鼠标在图片上左键单击选中Box的左上角
  5. 鼠标单击后按键盘i,显示Box
  6. 如果Box满意可以按回车键自动切分并保存Box内的内容到path文件中(文件名为原文件名+boxed),如果Box不满意可以按u删除本次选择操作
  7. 按空格键可以结束该图片,进入下一个图片的编辑

总结

空格-结束这张图进入下一张
左键-确定一个截图的起点
i-展示这张图最近确定的框选
u-清除目前图的所有框选
enter-确定这张图的最近一次框选,截图并保存

【注:一张图可以截取不限数量的小图,截取之后的图片保存在和原图相同的路径并且在文件名结尾处加上了boxed标记和序号】

源码

# coding: utf-8
import cv2
import os
import copy
# The folder that contain all the pictures
path = '你的文件地址'
# box size
width = 50
height = 100
#inner param
global gx
global gy
gx = 0
gy = 0

def clickListner(event,x,y,flags,param):
    global gx
    global gy
    if event == 1:
        print('clicked',x,',',y)
        gx,gy = x,y

#get all the files 
allFiles = os.listdir(path)
allValid = []
for file in allFiles:
    if file[-4:]=='.jpg' or file[-4:]=='.png':
        allValid.append(file)
# i:105 space:32 enter:13 u:117
for file in allValid:
    file = os.path.join(path,file)
    img = cv2.imread(file,cv2.IMREAD_GRAYSCALE)
    imgcopy = copy.deepcopy(img)
    cnt = 0
    while(True):
        cv2.namedWindow('current')
        cv2.imshow('current',imgcopy)
        cv2.setMouseCallback("current",clickListner)
        
        key = cv2.waitKey(0)
        print(key)
        if(key==13): # enter
            outputimg = img[gy:gy+width,gx:gx+width]
            cv2.imwrite(file[:-4]+'_boxed'+str(cnt)+'.jpg',outputimg)
            cnt += 1
            outputimg = None
            gx,gy = 0,0
            imgcopy = copy.deepcopy(img)
        if(key == 105): # draw box
            cv2.rectangle(imgcopy,(gx,gy),(gx+width,gy+width),255,2)
        if(key == 32): # skip
            break
        if(key == 117): #undo
            gx,gy = 0,0
            imgcopy = copy.deepcopy(img)
    cv2.destroyAllWindows()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值