Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ try/catch块未捕获libpng错误_C++_Opencv_Libpng - Fatal编程技术网

C++ try/catch块未捕获libpng错误

C++ try/catch块未捕获libpng错误,c++,opencv,libpng,C++,Opencv,Libpng,我正在使用OpenCV的imdecode()函数。当我传递一个部分图像时,它会打印到屏幕上说“libpng错误:PNG输入缓冲区不完整”。我试着把它放在一个try/catch块中,但我仍然看到它被打印出来。如何处理此类错误?显示这些错误是因为它直接打印到输出,不会引发异常。注意,LBPNG是用C开发的,不是C++的。 要删除此消息,您几乎必须编辑libpng源代码并重新编译它 只有一件事你可以尝试:也许libpng将它打印到stderr而不是stdout。如果是这样,您可以将stderr重定向到

我正在使用OpenCV的imdecode()函数。当我传递一个部分图像时,它会打印到屏幕上说“libpng错误:PNG输入缓冲区不完整”。我试着把它放在一个try/catch块中,但我仍然看到它被打印出来。如何处理此类错误?

显示这些错误是因为它直接打印到输出,不会引发异常。注意,LBPNG是用C开发的,不是C++的。 要删除此消息,您几乎必须编辑libpng源代码并重新编译它


只有一件事你可以尝试:也许libpng将它打印到
stderr
而不是
stdout
。如果是这样,您可以将
stderr
重定向到
/dev/null
或其他地方。

libpng默认情况下会将错误消息打印到stderr。但是你可以自己供应 替换错误处理程序来处理错误消息。请参阅随libpng一起分发的libpng-manual.txt文件中的说明(查找“user\u error\u fn”)


您无需重建libpng即可完成此操作;只需将替换处理程序放入自己的源代码中,并在png\u create\u read\u struct()中添加指向它的指针即可调用。

听起来像是直接打印到错误流。这与异常无关,因此与
try/catch
块无关。我不是直接使用libpng,而是使用另一个依赖于libpng的库(opencv)。那么这是否仍然可行?如果您的应用程序调用png\u create\u read\u struct(),那么您可以这样做。如果opencv没有用自己的错误处理程序替换错误处理程序,然后给您替换错误处理程序的能力,那么没有。我在docs.opencv.org的文档中没有看到任何说明可以使用自定义错误处理程序的内容。我搜索了libpng源以查找“缓冲区不完整””他空了出来。所以我猜应用程序,而不是libpng,正在调用png_error()。