当前位置:   article > 正文

【opencv】【python】libpng warning: iCCP: known incorrect sRGB profile 解决

libpng warning: iccp: known incorrect srgb profile

原因是png图片里面的profile ,好像又听说高版本的png在做什么。

解决方式很简单,重写一下这个图。

下面程序会读取 r"/ssd/xiedong/datasets/multilabelsTask/"下面的所有jpg和png图,多进程方式地重写一下图片,注意,如果opencv打不开这个图,这个图会被删除:

import multiprocessing
import os

import cv2
import numpy as np


def listPathAllfiles(dirname):
    result = []
    for maindir, subdir, file_name_list in os.walk(dirname):
        for filename in file_name_list:
            apath = os.path.join(maindir, filename)
            result.append(apath)
    return result


def overwrite(files1):
    for fname in files1:
        try:
            if fname.endswith(".jpg"):
                img = cv2.imdecode(np.fromfile(fname, dtype=np.uint8), 1)  # img是矩阵
                cv2.imencode('.jpg', img)[1].tofile(fname)
            elif fname.endswith(".png"):
                img = cv2.imdecode(np.fromfile(fname, dtype=np.uint8), 1)  # img是矩阵
                cv2.imencode('.png', img)[1].tofile(fname)
        except:
            os.remove(fname)
            print(fname)


if __name__ == '__main__':
    root = r"/ssd/xiedong/datasets/multilabelsTask/"
    files = listPathAllfiles(root)

    p = multiprocessing.Pool()  # 创建一个包含2个进程的进程池

    # split files to several parts
    for i in range(0, len(files), 10000):
        p.apply_async(func=overwrite, args=(files[i:i + 1000],))  # 往池子里加一个异步执行的子进城

    p.close()  # 等子进程执行完毕后关闭进程池
    p.join()  # 主进程等待

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/722001
推荐阅读
相关标签
  

闽ICP备14008679号