[自用代码]python-opencv实现对图片进行框选保存

  • 扫描旧照片进行数字化备份,对于整版的照片需要分别截取保存,扫描后的图片如下所示:
    在这里插入图片描述
  • 具体实现代码如下:
import cv2
import os
import glob

# 定义文件夹路径和保存路径
folder_path = 'test'# 存放原始图片的文件夹
save_path = 'test2'# 保存图片的文件夹

# 获取文件夹内所有图片文件
file_list = glob.glob(os.path.join(folder_path, '*.jpg'))

# 循环处理每张图片
for i, file_path in enumerate(file_list):
    # 读取图片
    img = cv2.imread(file_path)

    # 获取图片尺寸
    height, width, _ = img.shape

    # 计算缩放比例
    scale = min(1.0, 1024/max(height, width))

    # 缩放图片
    img_resized = cv2.resize(img, None, fx=scale, fy=scale)

    # 创建窗口并显示图片
    cv2.namedWindow('image')
    cv2.imshow('image', img_resized)

    # 初始化框选区域列表
    rect_list = []

    # 循环框选区域
    while True:

        # 等待用户框选区域
        rect = cv2.selectROI('image', img_resized, False)

        # 计算缩放后的框选区域
        rect_resized = [int(x/scale) for x in rect]


        # 如果没有框选区域,则退出循环
        if rect == (0, 0, 0, 0):
            break
        # 截取选中区域并保存
        crop_img = img[rect_resized[1]:rect_resized[1]+rect_resized[3], rect_resized[0]:rect_resized[0]+rect_resized[2]]
        
        rect_list.append(rect)
        cv2.imwrite(os.path.join(save_path, f'{i+1}_{len(rect_list)}.jpg'), crop_img)

    # …[omitted]

  • 框选过程如图所示:
    在这里插入图片描述
  • 框选后利用空格或回车保存,如果需要跳到下一张图片,利用C键即可,循环到最后一张图片会自动跳出。最终效果如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

deyiwang89

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

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

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

打赏作者

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

抵扣说明:

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

余额充值