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

  • 扫描旧照片进行数字化备份,对于整版的照片需要分别截取保存,扫描后的图片如下所示:
    [自用代码]python-opencv实现对图片进行框选保存_第1张图片
  • 具体实现代码如下:
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]

  • 框选过程如图所示:
    [自用代码]python-opencv实现对图片进行框选保存_第2张图片
  • 框选后利用空格或回车保存,如果需要跳到下一张图片,利用C键即可,循环到最后一张图片会自动跳出。最终效果如下:
    [自用代码]python-opencv实现对图片进行框选保存_第3张图片
    [自用代码]python-opencv实现对图片进行框选保存_第4张图片
    [自用代码]python-opencv实现对图片进行框选保存_第5张图片

你可能感兴趣的:(自用代码,opencv,python,计算机视觉)