有点无聊3 2024-05-20 22:38 采纳率: 54.5%
浏览 12
已结题

opencv自适应二值化处理

opencv自适应二值化处理处理后图片有丢失,输入的图片有400多张但是输出只有200张

import numpy as np
from numpy import fft
import math
import os
import cv2
import time
input_folder = "D:/roTAR"
if not os.path.exists('TAR_binary'):
    os.mkdir('TAR_binary')
for filename in os.listdir(input_folder):
    image_path = os.path.join(input_folder, filename)
    frame = cv2.imread(image_path, 0)
    # 自适应阈值化能够根据图像不同区域亮度分布,改变阈值
    binary = cv2.adaptiveThreshold(frame, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 15, 10)
    t = time.time()
    filename = f"TAR_binary/binary_{t}.jpg"
    cv2.imwrite(filename, binary)

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-20 22:38
    关注

    引自免费微信小程序:皆我百晓生

    在您的代码中,您可能遇到了文件名冲突的问题,因为您使用了时间戳(time.time())作为每个输出文件的唯一标识符。当程序运行速度快时,两个接近的时间戳可能会导致同一个文件被多次覆盖。为了解决这个问题,您可以增加一个计数器来确保每个输出文件都有唯一的名称。

    以下是修改后的代码:

    import numpy as np
    from numpy import fft
    import math
    import os
    import cv2
    import time
    
    input_folder = "D:/roTAR"
    output_folder = 'TAR_binary'
    if not os.path.exists(output_folder):
        os.mkdir(output_folder)
    
    # 添加一个计数器来保证文件名唯一
    file_counter = 0
    
    for filename in os.listdir(input_folder):
        image_path = os.path.join(input_folder, filename)
        frame = cv2.imread(image_path, 0)
        
        # 自适应阈值化
        binary = cv2.adaptiveThreshold(frame, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 15, 10)
        
        # 使用计数器和时间戳创建唯一文件名
        t = time.time()
        filename = f"TAR_binary/binary_{file_counter}_{int(t * 1000)}.jpg"  # 增加千分之一秒精度以降低重复概率
        file_counter += 1
        
        cv2.imwrite(filename, binary)
    

    在这个版本的代码中,我添加了一个名为 file_counter 的变量来跟踪生成的文件数量,并将其与时间戳结合,以确保输出文件名是唯一的。同时,将时间戳乘以1000以增加时间分辨率,进一步降低文件名重复的可能性。这样应该可以解决您遇到的输出图片丢失问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月30日
  • 已采纳回答 5月22日
  • 创建了问题 5月20日

悬赏问题

  • ¥15 使用VH6501干扰RTR位,CANoe上显示的错误帧不足32个就进入bus off快慢恢复,为什么?
  • ¥15 大智慧怎么编写一个选股程序
  • ¥100 python 调用 cgps 命令获取 实时位置信息
  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题