Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.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
如何在Java中过滤OpenCV错误消息_Java_Opencv - Fatal编程技术网

如何在Java中过滤OpenCV错误消息

如何在Java中过滤OpenCV错误消息,java,opencv,Java,Opencv,这个问题的问题已经讨论过了,例如 描述 ErrorCallback cv::redirectError ( ErrorCallback errCallback, void * userdata = 0, void ** prevUserdata = 0 ) 如何利用此功能过滤烦人的信息? 例如 [mjpeg @ 0x7fe5a696ea00] unable to decode APP fields: In

这个问题的问题已经讨论过了,例如

描述

ErrorCallback cv::redirectError     (   ErrorCallback   errCallback,
        void *      userdata = 0,
        void **     prevUserdata = 0 
    )   

如何利用此功能过滤烦人的信息?

例如

[mjpeg @ 0x7fe5a696ea00] unable to decode APP fields: Invalid data found when processing input
来自Logitech USB网络摄像头mjpeg流,该流在每一帧上创建,是超级流,不需要

还有一个可用的。不幸的是,import org.opencv.utils只包含“转换器”,但从opencv 3.4.8开始没有日志记录

如何从Java设置日志级别?

enum    LogLevel {
  LOG_LEVEL_SILENT = 0,
  LOG_LEVEL_FATAL = 1,
  LOG_LEVEL_ERROR = 2,
  LOG_LEVEL_WARNING = 3,
  LOG_LEVEL_INFO = 4,
  LOG_LEVEL_DEBUG = 5,
  LOG_LEVEL_VERBOSE = 6
}

会有帮助吗?

如何使用此功能来过滤烦人的信息?
enum    LogLevel {
  LOG_LEVEL_SILENT = 0,
  LOG_LEVEL_FATAL = 1,
  LOG_LEVEL_ERROR = 2,
  LOG_LEVEL_WARNING = 3,
  LOG_LEVEL_INFO = 4,
  LOG_LEVEL_DEBUG = 5,
  LOG_LEVEL_VERBOSE = 6
}
如何从Java设置日志级别?

enum    LogLevel {
  LOG_LEVEL_SILENT = 0,
  LOG_LEVEL_FATAL = 1,
  LOG_LEVEL_ERROR = 2,
  LOG_LEVEL_WARNING = 3,
  LOG_LEVEL_INFO = 4,
  LOG_LEVEL_DEBUG = 5,
  LOG_LEVEL_VERBOSE = 6
}
目前(2020-01年)还不能。即使可以从Java访问API,bug也会阻止它

是否[将System.out和System.err重定向到slf4j][5]有帮助?

enum    LogLevel {
  LOG_LEVEL_SILENT = 0,
  LOG_LEVEL_FATAL = 1,
  LOG_LEVEL_ERROR = 2,
  LOG_LEVEL_WARNING = 3,
  LOG_LEVEL_INFO = 4,
  LOG_LEVEL_DEBUG = 5,
  LOG_LEVEL_VERBOSE = 6
}
否-见下文。结果是:

11:05:56.407 [main] DEBUG u.o.l.s.c.SysOutOverSLF4JInitialiser - Your logging framework class ch.qos.logback.classic.Logger should not need access to the standard println methods on the console, so you should not need to register a logging system package.
11:05:56.417 [main] INFO  u.o.l.s.context.SysOutOverSLF4J - Replaced standard System.out and System.err PrintStreams with SLF4JPrintStreams
11:05:56.420 [main] INFO  u.o.l.s.context.SysOutOverSLF4J - Redirected System.out and System.err to SLF4J for this context
11:05:56.421 [main] ERROR org.rcdukes.roi.TestROI - testing stderr via slf4j
[mjpeg @ 0x7f958b1b0400] unable to decode APP fields: Invalid data found when processing input
[mjpeg @ 0x7f958b027a00] unable to decode APP fields: Invalid data found when processing input
解码应用程序字段部分仍然通过一些stderr魔术显示

  @Test
  public void testLogStderr() throws Exception {
    NativeLibrary.logStdErr();
    System.err.println("testing stderr via slf4j");
    NativeLibrary.load();
    VideoCapture capture = new VideoCapture();
    // Dorf Appenzell
    //String url="http://213.193.89.202/axis-cgi/mjpg/video.cgi";
    // Logitech Cam on test car
    // url="http://picarford:8080/?action=stream";
    File imgRoot = new File(testPath);
    File testStream=new File(imgRoot,"logitech_test_stream.mjpg");
    assertTrue(testStream.canRead());
    capture.open(testStream.getPath());
    Mat image=new Mat();
    capture.read(image);
    assertEquals(640,image.width());
    assertEquals(480,image.height());
    capture.release();
  }
有趣的一面

根据文件 通过设置环境变量AV_Log_FORCE_NOCOLOR或NO_COLOR,可以禁用日志着色,也可以强制设置环境变量AV_Log_FORCE_COLOR。不推荐使用环境变量NO_COLOR,并将在将来的FFmpeg版本中删除


但似乎没有选项从环境变量更改日志记录级别…

IIRC,您作为示例提供的消息不是来自OpenCV,而是来自ffmpeg,它只是将其写入标准错误流。@DanMašek thx它将看到正确方向的点。但是,在OpenCV场景中,ffmpeg作为库嵌入,如何实现这一点呢