python中实现对文件夹下所有图片二值化处理 |小知识

发布于 2021-07-10  20 次阅读


我的csdn文章链接:https://blog.csdn.net/LLLLQZ/article/details/116371777

前言

有时候我们需要对成千上万张图片进行二值化处理,以达到我们的需要,下面介绍怎么用python代码实现。

代码

import cv2
import os

def read_path(file_pathname):
    #遍历该目录下的所有图片文件
    for filename in os.listdir(file_pathname):
        print(filename)
        image = cv2.imread(file_pathname+'/'+filename)
        ####change to gray
      #(下面第一行是将RGB转成单通道灰度图,第二步是将单通道灰度图转成3通道灰度图)
        image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)  # 二值化函数 cvtcolor不能有中文路径!!!

        cv2.threshold(image, 140, 255, 0, image)  # 二值化函数
        retval, dst = cv2.threshold(image, 0, 255, cv2.THRESH_OTSU)
        # # 腐蚀和膨胀是对白色部分而言的,膨胀,白区域变大,最后的参数为迭代次数
        # dst = cv2.dilate(dst, None, iterations=1)
        # # 腐蚀,白区域变小
        # dst = cv2.erode(dst, None, iterations=4)
        # cv2.namedWindow("Image")  # 图片显示框的名字 这行没啥用
        # cv2.imshow("Image", dst)  # 图片显示
        cv2.waitKey(0)
        cv2.imwrite('E:/project/python/dataset/U2NET/test_dutomron/'+filename, dst)  # 保存当前灰度值处理过后的文件

        # 图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。
        # 一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,常用的方法就是设定一个阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。这是研究灰度变换的最特殊的方法,称为图像的二值化(Binarization)。

        # Python-OpenCV中提供了阈值(threshold)函数:
        # cv2.threshold()
        # 函数:
        # 1. src 指原图像,原图像应该是灰度图。
        # 2. x 指用来对像素值进行分类的阈值。
        # 3. y 指当像素值高于(有时是小于)阈值时应该被赋予的新的像素值
        # 4. Methods 指不同的阈值方法,
read_path("E:/project/python/dataset/U2NET/DUT-OMRON")

后话

如果有什么问题请在评论区留言,谢谢大家阅读博客