图像二值化

import os
import cv2

# 定义输入路径(可以是图像、视频或文件夹)和输出文件夹的路径
input_path = 'gA_4_s5_2019-03-13T10;56;52+01;00_rgb_face.mp4'  # 替换为要处理的图像、视频或文件夹的路径
output_folder = 'binaryzation'  # 替换为输出文件的文件夹路径

# 确保输出文件夹存在,如果不存在则创建
if not os.path.exists(output_folder):
    os.makedirs(output_folder)


def process_and_save(input_path, output_folder, threshold_value=128, i=0): # None
    if os.path.isfile(input_path):  # 如果输入是文件
        filename = os.path.basename(input_path)
        output_path = os.path.join(output_folder, filename)

        if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp')):  # 处理图像文件
            image = cv2.imread(input_path, 0)  # 以灰度模式读取图像
            _, binary_image = cv2.threshold(image, threshold_value, 255, cv2.THRESH_BINARY)
            cv2.imwrite(output_path, binary_image)  # 保存二值化图像
        elif filename.lower().endswith(('.mp4', '.avi', '.mkv')):  # 处理视频文件
            cap = cv2.VideoCapture(input_path)
            # # cv2.VideoWriter_fourcc(*'XVID')来指定的,表示使用XVID编码器
            fourcc = cv2.VideoWriter_fourcc(*'XVID')
            # VideoWriter的构造函数\输出视频文件的路径/指定视频编解码器的四字符代码(FourCC)在您的代码中,fourcc 是通过
            # 视频帧速率30.0,(int(cap.get(3)), int(cap.get(4)),): 这是视频的分辨率,它是一个元组,包含视频的宽度和高度。cap.get(3)获取视频的宽度,cap.get(4)获取视频的高度。这个元组用于指定输出视频的分辨率与输入视频相同
            out = cv2.VideoWriter(output_path, fourcc, 30.0, (int(cap.get(3)), int(cap.get(4)),))
            print(f"图像视频参数{out}")

            while cap.isOpened():
                ret, frame = cap.read()
                i += 1  # 递增 i
                print(f"二值化中{i}")
                if not ret:
                    break

                gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
                _, binary_frame = cv2.threshold(gray_frame, threshold_value, 255, cv2.THRESH_BINARY)

                out.write(cv2.cvtColor(binary_frame, cv2.COLOR_GRAY2BGR))

            cap.release()
            out.release()
            print(f"二值化完成,共处理了{i}张图像")

    elif os.path.isdir(input_path):  # 如果输入是文件夹
        for filename in os.listdir(input_path):
            file_path = os.path.join(input_path, filename)
            process_and_save(file_path, output_folder, threshold_value)

# 设置二值化阈值,可以根据需要调整
threshold_value = 88

# 处理指定的输入路径
process_and_save(input_path, output_folder, threshold_value)

print(f"二值化完成并保存在指定文件夹中{output_folder}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值