Premature end of JPEG file 解决方案

原因:出现上面的问题一般是图片格式破损了

利用UltraEdit文本编辑器查看图片格式

打开一张图片,首先正确的格式为:  以FF D8开头,以 FF D9结尾

 破损的图像开头是FF D8 结尾就是乱七八糟的

 

 解决方法:

批量读取图片并重新保存,没错就这么简单

附代码:

import os
import cv2
# 重写保存
directory_name = 'D:/DeepLearning/dataset/VOCdevkit/VOC2022/JPEGImages/'  # directory读取图片位置
save_directory_name = 'D:/DeepLearning/dataset/rewrite_picture'  # save_directory保存图片位置

for filename in os.listdir(directory_name):
    input_img = cv2.imread(directory_name + "/" + filename)

    cv2.imwrite(save_directory_name + '/' + filename, input_img)

下午又发现一个问题,当图像格式破损比较严重,以至于无法读取,更不要提重写了,使用上面的代码读取有问题会报错

error: (-215:Assertion failed) !_img.empty() in function ‘cv::imwrite

解决办法:

将A文件夹中的图片依次读取到B文件夹,当程序意外卡住停止,这个时候看B文件夹中生成的图片,例如:如果停留在序号18,说明A文件中序号19的图片有问题,这个时候删除A文件夹中的图片19,然后继续执行,手动删除所有破损照片。这个代码我只关注了输出图片的序号out_name,可以找出破损的照片。

代码:

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
import random
import numpy as np
import cv2
import os
import math
import torch
from torch import nn
# 图像灰度延展、直方图均衡化

file_root = r'D:/DeepLearning/dataset/obstacle/mm/'  # 当前文件夹下的所有图片
file_list = os.listdir(file_root)
save_out = r"D:/DeepLearning/dataset/obstacle/ll/"  # 保存图片的文件夹名称

for img_name in file_list:
    img_path = file_root + img_name

    img = cv.imread(img_path, -1)#读取
    # img = cv2.resize(img, (w, h))
    img_norm = img.astype(np.uint8)#转换格式便于保存输出
    # out_name = img_name.split('.')[0]
    out_name = img_name
    save_path = save_out + 'gs_' + out_name + '.png'
    cv2.imwrite(save_path, img_norm)#

然后得到的B文件夹中的图片,我又用最上面的代码重写了一边

猜你喜欢

转载自blog.csdn.net/ggbb_4/article/details/128127786
今日推荐