代码之家  ›  专栏  ›  技术社区  ›  mike1952

在Linux上的python中,我可以使用x264和opencv吗

  •  0
  • mike1952  · 技术社区  · 7 年前

    我正在使用python 3.6和opencv 3.4.1从Logitech C920网络摄像头捕获视频。我习惯Windows,在那里我可以编写自己的DirectShow过滤器来访问帧和控制相机。我发现自己在Linux上的深度不够了。

    我知道它可以运行24帧,至少通过使用GTK UVC视频查看器,但我只得到5帧。我怀疑这是由于格式-为了获得更高的速率,我需要X264之类的东西。这对OpenCV来说可能是不可能的,因为这意味着它无法再抓取一个帧。

    我试过设置视频编解码器,但有人告诉我

    cap.set(cv2.CAP_PROP_FORMAT, cv2.VideoWriter_fourcc(...
    
    VIDEOIO ERROR: V4L2: setting property #8 is not supported
    

    其他人也问过类似的问题,但我没有看到令人信服的答案:

    (没有答案) Capturing H264 stream with OpenCV

    (责怪司机) http://answers.opencv.org/question/30185/frame-capture-is-needlessly-slow/

    (在C++中设置相机格式) OpenCV VideoCapture with H264 CODEC

    (也在C++和OpenCV 2.4中完成) Capturing 1080p at 30fps from logitech c920 with openCV 2.4.3

    我发现一个链接,声称X264等不支持帧抓取,因此它不能做,但现在我找不到-这似乎是矛盾的答案,在C++和事实上,我们可以工作与X264文件格式。

    任何清楚的情况都会受到赞赏。

    编辑:

    根据要求,这里是cv2.getBuildInformation()的输出:

    General configuration for OpenCV 3.4.1 =====================================
      Version control:               3.4.1
    
      Platform:
        Timestamp:                   2018-05-19T13:51:11Z
        Host:                        Linux 4.4.0-101-generic x86_64
        CMake:                       3.9.0
        CMake generator:             Unix Makefiles
        CMake build tool:            /usr/bin/gmake
        Configuration:               Release
    
      CPU/HW features:
        Baseline:                    SSE SSE2 SSE3
          requested:                 SSE3
        Dispatched code generation:  SSE4_1 SSE4_2 FP16 AVX AVX2
          requested:                 SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKX
          SSE4_1 (3 files):          + SSSE3 SSE4_1
          SSE4_2 (1 files):          + SSSE3 SSE4_1 POPCNT SSE4_2
          FP16 (1 files):            + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX
          AVX (5 files):             + SSSE3 SSE4_1 POPCNT SSE4_2 AVX
          AVX2 (9 files):            + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2
    
      C/C++:
        Built as dynamic libs?:      NO
        C++ Compiler:                /opt/rh/devtoolset-2/root/usr/bin/c++  (ver 4.8.2)
        C++ flags (Release):         -Wl,-strip-all   -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Winit-self -Wno-narrowing -Wno-delete-non-virtual-dtor -Wno-comment -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG  -DNDEBUG
        C++ flags (Debug):           -Wl,-strip-all   -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Winit-self -Wno-narrowing -Wno-delete-non-virtual-dtor -Wno-comment -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -g  -O0 -DDEBUG -D_DEBUG
        C Compiler:                  /opt/rh/devtoolset-2/root/usr/bin/cc
        C flags (Release):           -Wl,-strip-all   -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Winit-self -Wno-narrowing -Wno-comment -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -O3 -DNDEBUG  -DNDEBUG
        C flags (Debug):             -Wl,-strip-all   -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Winit-self -Wno-narrowing -Wno-comment -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -g  -O0 -DDEBUG -D_DEBUG
        Linker flags (Release):      -L/root/ffmpeg_build/lib
        Linker flags (Debug):        -L/root/ffmpeg_build/lib
        ccache:                      NO
        Precompiled headers:         NO
        Extra dependencies:          /opt/Qt4.8.7/lib/libQtGui.so /opt/Qt4.8.7/lib/libQtTest.so /opt/Qt4.8.7/lib/libQtCore.so /lib64/libz.so /opt/libjpeg-turbo/lib64/libjpeg.a avcodec avformat avutil swscale dl m pthread rt
        3rdparty dependencies:       ittnotify libprotobuf libwebp libpng libtiff libjasper IlmImf
    
      OpenCV modules:
        To be built:                 calib3d core dnn features2d flann highgui imgcodecs imgproc java_bindings_generator ml objdetect photo python3 python_bindings_generator shape stitching superres video videoio videostab
        Disabled:                    js world
        Disabled by dependency:      -
        Unavailable:                 cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev java python2ts viz
        Applications:                -
        Documentation:               NO
        Non-free algorithms:         NO
    
      GUI:
        QT:                          YES (ver 4.8.7 EDITION = OpenSource)
          QT OpenGL support:         NO
        GTK+:                        NO
        VTK support:                 NO
    
      Media I/O:
        ZLib:                        /lib64/libz.so (ver 1.2.3)
        JPEG:                        /opt/libjpeg-turbo/lib64/libjpeg.a (ver )
        WEBP:                        build (ver encoder: 0x020e)
        PNG:                         build (ver 1.6.34)
        TIFF:                        build (ver 42 - 4.0.9)
        JPEG 2000:                   build (ver 1.900.1)
        OpenEXR:                     build (ver 1.7.1)
    
      Video I/O:
        DC1394:                      NO
        FFMPEG:                      YES
          avcodec:                   YES (ver 58.19.100)
          avformat:                  YES (ver 58.13.100)
          avutil:                    YES (ver 56.18.100)
          swscale:                   YES (ver 5.2.100)
          avresample:                NO
        GStreamer:                   NO
        libv4l/libv4l2:              NO
        v4l/v4l2:                    linux/videodev.h linux/videodev2.h
        gPhoto2:                     NO
    
      Parallel framework:            pthreads
    
      Trace:                         YES (with Intel ITT)
    
      Other third-party libraries:
        Lapack:                      NO
        Eigen:                       NO
        Custom HAL:                  NO
        Protobuf:                    build (3.5.1)
    
      NVIDIA CUDA:                   NO
    
      OpenCL:                        YES (no extra features)
        Include path:                /io/opencv/3rdparty/include/opencl/1.2
        Link libraries:              Dynamic load
    
      Python 3:
        Interpreter:                 /opt/python/cp36-cp36m/bin/python (ver 3.6.5)
        Libraries:                   libpython3.6m.a (ver 3.6.5)
        numpy:                       /opt/python/cp36-cp36m/lib/python3.6/site-packages/numpy/core/include (ver 1.11.3)
        packages path:               lib/python3.6/site-packages
    
      Python (for build):            /opt/python/cp36-cp36m/bin/python
    
      Java:
        ant:                         NO
        JNI:                         NO
        Java wrappers:               NO
        Java tests:                  NO
    
      Matlab:                        NO
    
      Install to:                    /io/_skbuild/cmake-install
    -----------------------------------------------------------------
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   mike1952    7 年前

    • cv2.getBuildInformation()

    https://docs.opencv.org/3.2.0/d7/d9f/tutorial_linux_install.html https://docs.opencv.org/3.0-beta/doc/tutorials/introduction/linux_eclipse/linux_eclipse.html

    #include "opencv2/opencv.hpp"
    #include "opencv2/videoio.hpp"
    using namespace cv;
    
    int main(int, char**)
    {
        VideoCapture cap(0); // open the default camera
        if(!cap.isOpened())  // check if we succeeded
            return -1;
    
        cap.set(CV_CAP_PROP_FRAME_WIDTH,1920);
        cap.set(CV_CAP_PROP_FRAME_HEIGHT,1080);
        Mat edges;
        namedWindow("camera",1);
        for(;;)
        {
            Mat frame;
            cap >> frame; // get a new frame from camera
            imshow("camera", frame);
            if(waitKey(30) >= 0) break;
        }
        return 0;
    }