C++ 捕获/抑制发送到std::cout的OpenCV警告

C++ 捕获/抑制发送到std::cout的OpenCV警告,c++,opencv,C++,Opencv,当连接了摄像头并且您为VideoCapture提供了未映射的int DeviceID时,OpenCV输出(注意,std::cout)无法停止流:无效参数 如何捕获/抑制此消息?您可以自己使用此函数处理任何消息(如断言)。例如,要使输出静音,可以使用以下代码: #include <opencv2/opencv.hpp> int dummy_error_handler(int status , char const* func_name , char const* er

当连接了摄像头并且您为
VideoCapture
提供了未映射的
int DeviceID
时,OpenCV输出(注意,
std::cout
)无法停止流:无效参数

如何捕获/抑制此消息?

您可以自己使用此函数处理任何消息(如断言)。例如,要使输出静音,可以使用以下代码:

#include <opencv2/opencv.hpp>

int dummy_error_handler(int status
    , char const* func_name
    , char const* err_msg
    , char const* file_name
    , int line
    , void* userdata)
{
    //Do nothing -- will suppress console output
    return 0;   //Return value is not used
}

void set_dummy_error_handler()
{
    cv::redirectError(dummy_error_handler);
}

void reset_error_handler()
{
    cv::redirectError(nullptr);
}
#包括
int虚拟\u错误\u处理程序(int状态
,char const*func_名称
,char const*err_msg
,char const*文件名
,整数行
,void*userdata)
{
//不执行任何操作--将抑制控制台输出
返回0;//未使用返回值
}
无效集\u伪\u错误\u处理程序()
{
cv::重定向错误(伪错误处理程序);
}
无效重置错误处理程序()
{
cv::重定向错误(nullptr);
}

注意:如果实际消息来自其他来源,例如OpenCV使用的第三方库,需要一种不同的方法。

我认为您可以从这里的示例推导出您需要的内容:这个示例解释如何将
std::cout
流重定向到一个文件,并重置为noraml
stdout
文件after.IIRC是您要查找的内容——至少是来自OpenCV的任何消息。请尝试一下,看来重新干燥错误并没有捕捉到它。到目前为止,我仍在试图调查什么叫它运气很差。@xOtik我在和cap_libv4l中找到了这些消息,出于某种奇怪的原因,作者选择在那里使用
perror
。(在其他地方看不到它的使用)同样,不幸的是,上面的这些都没有帮助。重建OpenCV会修改这些行以抑制输出/更改它以使其可捕获,还是只会导致大规模混乱?在代码> PrRor 上的C++ 11文档没有显式地声明它在调用后返回。@ XOTKE<代码> PrRor 应该只打印错误消息并返回,所以几乎任何事情都应该是好的。您可以注释掉这些行,或者编辑它们以使用类似
CV\u Assert
的内容,或者直接使用
CV::error
,利用
strerror
来格式化当前系统错误,就像
perror
那样。通过
cv::error
生成的消息可以处理
redirectError