libpng error处理方式
程序员文章站
2022-07-14 17:10:18
...
用opencv读取某图像时,报错libpng error: Read Error。
可以发现的是,这是一张有损的图像,虽然imgcat可以查看,而且也可以预览,但是该图像,不能打开,且不能直接imread,并且try except不能捕获该错误。
try:
x = cv2.imread("85b3dca3_17dee0c3f4d2a48.png",-1)
except Exception as e:
print('遇到错误: ',e.__class__.__name__,e)
上述方式不能捕获到该异常,只会打印libpng error: Read Error
解决方式:用Image读取然后转化到opencv读取,此时不会有异常抛出
import cv2
from PIL import Image
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
try:
img = Image.open("85b3dca3_17dee0c3f4d2a48.png").convert("RGB").save("w.png")
img = cv2.imread("w.png")
except Exception as e:
print('遇到错误: ',e.__class__.__name__,e)
对于c++,也存在读取图像失败的情况,这儿,我直接不处理这些图像
try{
image = cv::imread(imagePathList[i], cv::IMREAD_UNCHANGED);
}catch (const exception &e) {
cout << "读取图像失败图像失败" << e.what();
}
if (image.empty()) continue;
对于传过来的字节流,进行imdecode的时候,部分图像由于有损,因此会报PNG input buffer is incomplete 的错误,对于这些图像,也是不进行处理
//const std::vector<int8_t> &image
if (image.empty()){
LOG(ERROR) << "@@@[email protected]@@ " << input_id;
return;
}
cv::Mat origin_image;
try{
origin_image = cv::imdecode(image, IMREAD_UNCHANGED);
}catch (const exception &e) {
LOG(ERROR) << "imdecode图像失败" << e.what();
}
if (origin_image.empty()) return;
推荐阅读
-
VSCode出现ERROR: Could not find a version that satisfies the requirement cv2 (from versions: none)错误
-
解决mysql ERROR 1045 (28000)-- Access denied for user问题
-
win10系统还原出现Usage Error 10099该如何解决?
-
Photoshop CS6error16错误怎么解决 轻轻松松摆平它
-
cad2008安装时提示Error1904怎么办?
-
Outlook提示503 Error: need EHLO and AUTH first的解决办法
-
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
-
PHP XML error parsing SOAP payload on line 1
-
mysql启动时出现ERROR 2003 (HY000)问题的解决方法
-
PE还原Win7系统提示错误还原无法继续Error Number:(19010) 的原因及解决方法