【瑕疵检测—阈值分割批量截取roi区域并保存到文件夹】

12 篇文章 2 订阅
8 篇文章 0 订阅

【利用阈值分割,帮小姐姐批量截取roi区域并保存到文件夹】

功能说明

利用阈值分割,进行截取roi区域并保存到文件夹

小姐姐就喜欢你这样努力学习的样子!

在这里插入图片描述

代码实现

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/06/23
# @Author  : Wupke
# Purpose: 利用阈值分割,批量截取roi区域并保存

import cv2
import os
import copy
import numpy as np

file_dir = "E:\Desktop\\text_roi_cut\\test_cut\\"  # 图片读入路径
roi_save_path ="E:\Desktop\\text_roi_cut\\test_cut\\roi_cut\\" # roi 存放路径

def roi_cut():
    
    for root, dirs, files in os.walk(file_dir): 
# root 所指的是当前正在遍历的这个文件夹的本身的地址
# dirs 是一个 list,内容是该文件夹中所有的目录的名字(不包括子目录)
# files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
        for file in files:  # 遍历文件见中的图片
            myimage = cv2.imread(file_dir + file)  #  以路径+文件名,读入初始图片 
            # print(file_dir + file)
            resize = myimage.shape
            #image.shape
            #myimage.shape[0][1][2],依次为图像的垂直方向像素值,水平方向像素值,通道数
            # print(resize[1])

            myimage1 = copy.deepcopy(myimage)  # 深层复制
            gray = cv2.cvtColor(myimage, cv2.COLOR_BGR2GRAY)  # 转灰度图
            ret, binary = cv2.threshold(gray, 30, 255, 0)     # 自适应二值化

            contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE);  # 查找所有轮廓,每个轮廓信息保存于contours数组中
            img = cv2.drawContours(myimage, contours, -1, (0, 255, 0), 1, 8); # 绘制轮廓线或填充轮廓线,在二进制图像中检索连接组件并给它们贴上标签
            
        
            test_point = (resize[1]*4/5, resize[0]/2)
            # print(test_point)
            # counter = 0
           #  ROI和原图进行与运算,筛出原图中的ROI区域
            for i in range(len(contours)-1):
                area = cv2.contourArea(contours[i])    # 感兴趣区轮廓部分的起点和终点,默认计算整个轮廓的面积
                
                flag = cv2.pointPolygonTest(contours[i], test_point, False)   # 轮廓对比
                # print(flag)
                if area > 15000 and flag==1:
                    # counter = counter + 1
                    # print(contours[i])
                    # print(area)
                    
                    contour = contours[i]

                    bounding_box = cv2.boundingRect(contour)  # 计算轮廓的垂直边界最小矩形,矩形是与图像上下边界平行的
                    [x, y, w, h] = bounding_box   
            # print(counter)

            # 截取roi并保存
            myimage2 = myimage1[y:y + h, x:x + w]
            
            if not os.path.exists(roi_save_path):
                os.mkdir(roi_save_path)
            cv2.imwrite(roi_save_path + file, myimage2)

            # cv2.imshow("Hello", myimage2)
            # cv2.waitKey(0)
            # cv2.destroyAllWindows()
            
if __name__ == "__main__":
    test = roi_cut()

效果展示

原图

在这里插入图片描述

截取的roi 区域

在这里插入图片描述

保存

在这里插入图片描述

知识补充点

#!/usr/bin/env python 与 #!/usr/bin/python

脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它.
#!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器;
#!/usr/bin/env python这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里。当系统看到这一行的时候,首先会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作。
#!/usr/bin/python相当于写死了python路径;
#!/usr/bin/env python会去环境设置寻找python目录,推荐这种写法

flag ==1

flag作为if的判断条件,原值为0,当满足while里的if语句,flag=1,即为找到x满足if语句的条件,然后跳出循环,
flag作为一个标识,如果找到了满足条件的x,那么在下面的if-else语句中将输出正确的x,否则表示没找到

Reference

https://blog.csdn.net/achacuo3822/article/details/101714431
https://blog.csdn.net/weixin_42251888/article/details/112036770

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
批量快速自适应阈值化处理图像并保存文件夹,您可以使用以下代码: ```python import cv2 import os # 输入文件夹路径和输出文件夹路径 input_folder = 'input_folder' output_folder = 'output_folder' # 确保输出文件夹存在 if not os.path.exists(output_folder): os.makedirs(output_folder) # 遍历输入文件夹中的图像文件 for filename in os.listdir(input_folder): if filename.endswith('.jpg') or filename.endswith('.png'): # 读取图像 img = cv2.imread(os.path.join(input_folder, filename), 0) # 自适应阈值化处理 th = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2) # 构造输出文件路径 output_path = os.path.join(output_folder, filename) # 保存处理后的图像 cv2.imwrite(output_path, th) print("图像处理完成!") ``` 在上面的代码中,您需要将`input_folder`和`output_folder`分别设置为输入文件夹和输出文件夹的路径。首先,代码会确保输出文件夹存在,如果不存在则创建它。然后,使用`os.listdir()`函数遍历输入文件夹中的图像文件。对于每个图像文件,首先使用`cv2.imread()`函数读取图像,并使用`cv2.adaptiveThreshold()`函数进行自适应阈值化处理。接下来,构造输出文件路径,并使用`cv2.imwrite()`函数将处理后的图像保存到输出文件夹中。 运行代码后,它将批量处理输入文件夹中的所有图像,并将处理后的图像保存到输出文件夹中。希望对您有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值