【debug】Corrupt JPEG data: premature end of data segment

【debug】Corrupt JPEG data: premature end of data segment

在这里插入图片描述数据集在读取的时候,判断一张图片是否损坏的方法也无法判断出。在训练时才出现标题处的报错。下面的代码是yolov5在数据读取时判断图片是否损坏的代码:

with open(im_file, 'rb') as f:
     f.seek(-2, 2)
      if f.read() != b'\xff\xd9':  # corrupt JPEG
          ImageOps.exif_transpose(Image.open(im_file)).save(im_file, 'JPEG', subsampling=0, quality=100)
          msg = f'{prefix}WARNING: {im_file}: corrupt JPEG restored and saved'

现象:
在显示的过程中偶尔出现图像只显示一部分,剩余部分为灰色或者显示异常,并提示错误为:Corrupt JPEG data: premature end of data segment
在这里插入图片描述

原因:
由于下载、保存的时候出现意外,导致图片保存不完整。

解决方法:

import cv2
import numpy as np

def detect_uniform_image(image_path, threshold=0.90): //阈值根据图像的呈像可调节
    # 读取图像
    image = cv2.imread(image_path)
    # 转换为灰度图像
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # 计算像素值的直方图
    hist = cv2.calcHist([gray], [0], None, [256], [0,256])

    # 计算最常见的像素值的百分比
    max_pixel_count = np.max(hist)
    total_pixels = gray.shape[0] * gray.shape[1]
    percentage = max_pixel_count / total_pixels

    # 判断是否大多数像素值相同
    if percentage >= threshold:
        print(image_path)
    else:
        pass

# 图像路径
image_path = "img_path"

import os
for file in os.listdir(image_path):
    # 检测图像中大多数像素值是否一样
    detect_uniform_image(image_path+file)
  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值