赞
踩
原因:出现上面的问题一般是图片格式破损了
利用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)
下午又发现一个问题,当图像格式破损比较严重,以至于无法读取,更不要提重写了,使用上面的代码读取有问题会报错
解决办法:
将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文件夹中的图片,我又用最上面的代码重写了一边
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。