标签:img os warning rm libpng path 错误处理 whole png
png图片缺乏某些库,导致损坏,或者多余了一些数据会导致以下报错:
libpng warning: iCCP: known incorrect sRGB profile
libpng warning iccp extra compressed data
一些可能的解决方案:
已有方案
来自:https://blog.csdn.net/qq_37924224/article/details/119181028
libpng 1.6及以上版本增强了ICC profiles检查,所以发出警告。从 PNG 图像中删除 iCCP profiles。
可以先读取,再重新保存:
import cv2
from skimage import io
image = io.imread(path)
image = cv2.cvtColor(image, cv2.COLOR_RGBA2BGRA)
cv2.imencode('.png',image)[1].tofile(path)
本文提供方案
观察到报错的图片根本无法打开,选择删除对应图片。
文件结构:
- all
- train
- folder1
- img1.png
- ....
- imgn.png
- foler2
- ...
- test
- folder1
- img1.png
- ....
- imgn.png
- foler2
- ...
实现功能:
重命名文件夹,重命名文件名称(ps: 原来是有中文的),使用convert命令转换png为jpg
import os
import cv2
import random
dir_path = "all/train"
def rename_folder():
for idx, subdir in enumerate(os.listdir(dir_path)):
new_folder = "%s_" % (str(random.randint(0,10000))) + str(idx)
whole_subdir = os.path.join(dir_path, subdir)
whole_newdir = os.path.join(dir_path, new_folder)
# print(f"rename {whole_subdir} to {whole_newdir}")
os.rename(whole_subdir, whole_newdir)
def rename():
# rename files
for subdir in os.listdir(dir_path):
whole_path = os.path.join(dir_path, subdir)
for idx, img_name in enumerate(os.listdir(whole_path)):
postfix = "png" if img_name.endswith("png") else "jpg"
new_img_name = str(idx) + "." + postfix
org_path = os.path.join(whole_path, img_name)
new_path = os.path.join(whole_path, new_img_name)
# print(f"rename {org_path} to {new_path}")
os.rename(org_path, new_path)
def convert_png2jpg():
# convert
for subdir in os.listdir(dir_path):
whole_path = os.path.join(dir_path, subdir)
for img_name in os.listdir(whole_path):
img_whole_path = os.path.join(whole_path, img_name)
if img_name.endswith("png"):
# print(img_whole_path)
img = cv2.imread(img_whole_path)
cv2.imwrite(img_whole_path, img)
os.system(
"convert %s %s"
% (img_whole_path, img_whole_path.replace("png", "jpg"))
)
def main():
# run with nohup
# 1. rm nohup.out
# 2. nohup python convert_png.py
rename_folder()
rename()
convert_png2jpg()
if __name__ == "__main__":
main()
这个时候有可能会出现报错:
这些无法convert的文件就是需要删除的对象,通过正则化方法匹配对应文件, 并删除。
import os
def main():
rm_list = greps()
rm(rm_list)
def greps():
import re
rm_list = []
file = "nohup.out"
f = open(file, "r")
for line in f.readlines():
res = re.findall("`.+'", line)
if res:
rm_list.append(*res)
return rm_list
def rm(rm_list):
rm_list = [item.lstrip("`").rstrip("'") for item in rm_list]
for item in rm_list:
print("rm: ", item)
os.system("rm %s" % item)
if __name__ == "__main__":
main()
标签:img,os,warning,rm,libpng,path,错误处理,whole,png 来源: https://www.cnblogs.com/pprp/p/15487000.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。