Pyhton OpenCV:批量识别图片外层轮廓并截图保存

Pyhton OpenCV:批量识别图片外层轮廓并截图保存


一、背景

图1
图2
  有2个文件夹,其中文件夹a存在多张如上图片,文件夹b为空。现希望读取文件夹a中所有图片,识别黑色矩形并截图保存至文件夹b中(即去掉黑色矩形之外的白色区域)。

二、源代码

# 系统:window7
# 编程工具:PyCharm
# 编程语言:python
# 前置条件:已安装好opencv相关环境

# coding:utf-8
import os
import cv2


# 读取文件夹内的所有文件的路径
def read_file_name(file_dir):
    list_path =[]  # 文件路径
    list_name = []  # 文件名
    for root, dirs, files in os.walk(file_dir):
        """
        print(root)  # 当前目录路径
        print(dirs)  # 当前路径下所有文件夹
        print(files)  # 当前路径下所有文件
       """
        path = root
        if len(dirs) == 0:  # 该目录下不存在文件夹
            for file in files:
                path1 = path + '//' + file
                # print(path1)
                list_path.append(path1)
                list_name.append(file)
        else:  # 该目录下存在文件夹
            for dir1 in dirs:
                path = path + '//' + dir1
                for file in files:
                    path1 = path + '//' + file
                    # print(path1)
                    list_path.append(path1)
                    list_name.append(file)
    return list_path, list_name


# 主函数
if __name__ == '__main__':
    # 读取所有图片的路径
    path_original = "C://Users//Administrator//Desktop//a"  # 原文件夹
    path_target = "C://Users//Administrator//Desktop//b"  # 目标文件夹
    file_path, file_name = read_file_name(path_original)
    i = 0
    for path in file_path:
        # 读取图片
        img_origin = cv2.imread(path)
        # 灰度化
        img_gray = cv2.cvtColor(img_origin, cv2.COLOR_BGR2GRAY)
        # 二值化
        ret, thresh = cv2.threshold(img_gray, 200, 255, cv2.THRESH_BINARY_INV)  # 识别黑色轮廓
        # 查找轮廓
        contours = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        # 画出最外层轮廓
        x, y, w, h = cv2.boundingRect(contours[0])
        # img_display = img_origin  # 浅拷贝,修改img_display时,同样也修改img_origin
        img_display = img_origin.copy()  # 深拷贝,修改img_display时不会改变img_origin
        cv2.rectangle(img_display, (x, y), (x + w, y + h), (0, 255, 0), 2)
        # 显示图片
        # cv2.imshow("image", img_display)
        # cv2.waitKey(1000)
        # 保存截图
        path_save = path_target + "//" + file_name[i]
        cv2.imwrite(path_save, img_origin[y:y+h, x:x+w])
        i = i + 1
    print("执行结束。")


三、执行结果

在这里插入图片描述
截图后的图片如下所示。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值