当前位置:   article > 正文

Premature end of JPEG file 解决方案

premature end of jpeg file

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

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

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

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

 

 解决方法:

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

附代码:

  1. import os
  2. import cv2
  3. # 重写保存
  4. directory_name = 'D:/DeepLearning/dataset/VOCdevkit/VOC2022/JPEGImages/' # directory读取图片位置
  5. save_directory_name = 'D:/DeepLearning/dataset/rewrite_picture' # save_directory保存图片位置
  6. for filename in os.listdir(directory_name):
  7. input_img = cv2.imread(directory_name + "/" + filename)
  8. 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,可以找出破损的照片。

代码:

  1. import cv2 as cv
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. import random
  5. import numpy as np
  6. import cv2
  7. import os
  8. import math
  9. import torch
  10. from torch import nn
  11. # 图像灰度延展、直方图均衡化
  12. file_root = r'D:/DeepLearning/dataset/obstacle/mm/' # 当前文件夹下的所有图片
  13. file_list = os.listdir(file_root)
  14. save_out = r"D:/DeepLearning/dataset/obstacle/ll/" # 保存图片的文件夹名称
  15. for img_name in file_list:
  16. img_path = file_root + img_name
  17. img = cv.imread(img_path, -1)#读取
  18. # img = cv2.resize(img, (w, h))
  19. img_norm = img.astype(np.uint8)#转换格式便于保存输出
  20. # out_name = img_name.split('.')[0]
  21. out_name = img_name
  22. save_path = save_out + 'gs_' + out_name + '.png'
  23. cv2.imwrite(save_path, img_norm)#

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/219459
推荐阅读
相关标签
  

闽ICP备14008679号