我正在使用高速IP摄像机拍摄的图像,通过以太网端口传输它们。在传输过程中,偶尔丢失或损坏几个字节而没有任何视觉影响。当我使用cvLoadImage按顺序加载图像时,经常出现“损坏的JPEG数据:数据段的过早结束”或“损坏的JPEG数据:标记0 * d9之前的无关字节”之类的消息。
我不希望cvLoadImage显示此类错误,因为它们由于图像的高速传输而很常见。打印到控制台也非常耗时,因为我可能一次处理多达2000张图像。
如何禁用这些消息。我有Opencv 2.0源代码,如果我得到正确的指针,可以深入研究它。
P.S。我尝试了查看grfmt_jpeg.cpp和类似的源文件,但没有在任何地方找到此错误消息。
答案 0 :(得分:0)
我认为没有一种漂亮而简洁的方法来避免这些错误的打印输出 - 它们来自libjpeg的核心。
如果您确实想深入了解谁发现错误,请查看3rdparty / libjpeg /。看看 jerror.h / c 。
PS。我认为您的特定错误来自 jdhuff.c 中jpeg_fill_bit_buffer()
的 no_more_bytes -goto-flag
答案 1 :(得分:0)
我将BUILD_JPEG
WITH_JPEG
重置为opencv设置为true,以便opencv使用自己的libjpeg而不是使用系统,并且3rdparty/libjpeg/jerror.c
中的fprintf已注释掉,当然禁用可能比可以淹没stderr的轻微烦恼更重要的消息:
METHODDEF(void)
output_message (j_common_ptr cinfo)
{
char buffer[JMSG_LENGTH_MAX];
/* Create the message */
(*cinfo->err->format_message) (cinfo, buffer);
#ifdef USE_WINDOWS_MESSAGEBOX
/* Display it in a message dialog box */
MessageBox(GetActiveWindow(), buffer, "JPEG Library Error",
MB_OK | MB_ICONERROR);
#else
/* Send it to stderr, adding a newline */
// fprintf(stderr, "%s\n", buffer);
#endif
}
更快的选择是将stderr重定向到/ dev / null,例如,现在看不到合法错误的更多可能性:
./cpp-example-bgfg_segm -m knn -c 2>/dev/null