C++ 如何打开cv+;CUDA和x2B;视频捕获?

C++ 如何打开cv+;CUDA和x2B;视频捕获?,c++,opencv,video,gpu,C++,Opencv,Video,Gpu,我有一台带有2个Nvidia RTX GPU的机器。 主要任务是从IP摄像机解码h264视频,并使用GPU将原始帧编码为JPEG 我通过以下来源构建opencv+cuda: cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules -D WITH_CUDA=ON -D WITH_TBB=ON -D EN

我有一台带有2个Nvidia RTX GPU的机器。 主要任务是从IP摄像机解码h264视频,并使用GPU将原始帧编码为JPEG

我通过以下来源构建opencv+cuda:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules -D WITH_CUDA=ON -D WITH_TBB=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_QT=OFF -D WITH_NVCUVID -D WITH_NVCUVID=ON -D CMAKE_C_COMPILER=/usr/bin/gcc-6 ..
make
sudo make install
我有一个捕获RTSP和保存JPEG的简单程序:

#include <strings.h>
#include <stdio.h>
#include <opencv2/opencv.hpp>
#include <opencv2/core/cuda.hpp>

using namespace std;

int main(int argc, char** argv)
{
    if ( argc != 2 ) {
      printf("no args\n");
      return -1;
    }
    cv::Mat frame;
    cv::VideoCapture cap;
    cap.open(argv[1]);
    if (!cap.isOpened()) {
        printf("ERROR! Unable to open camera\n");
        return -1;
    }
    printf("Start grabbing\n");
    for (;;)
    {
        cap.read(frame);
        if (frame.empty()) {
            printf("ERROR! blank frame grabbed\n");
            break;
        }
        vector<int> p;
        vector<unsigned char> buf;
        p.push_back(cv::IMWRITE_JPEG_QUALITY);
        p.push_back(50);
        imencode(".jpg", frame, buf, p);
        // Do something with buf ......
        printf("READY JPEG\n");
    }
    return 0;
}
但它只使用CPU。要使此程序使用GPU,我必须更改什么


提前感谢。

您正在使用
imwrite
API,它在后端使用
libjpeg
进行基于CPU的编码。如果您想使用GPU,则需要使用API(假设它已内置到OpenCV安装中)


OpenCV源代码repo中有一个函数。

您正在使用
imwrite
API,它在后端使用
libjpeg
进行基于CPU的编码。如果您想使用GPU,则需要使用API(假设它已内置到OpenCV安装中)

在OpenCV源代码repo中有。可能从这里开始阅读:您需要使用其他垫子类型和其他标题可能从这里开始阅读:您需要使用其他垫子类型和其他标题
cmake_minimum_required(VERSION 2.8)
project( test_jpeg_cpu )
find_package( OpenCV REQUIRED )
find_package( CUDA REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} ${CUDA_INCLUDE_DIRS} )
add_executable( test_jpeg_cpu test_jpeg_cpu.cpp )
target_link_libraries( test_jpeg_cpu ${OpenCV_LIBS} ${CUDA_LIBRARIES} cuda ${CMAKE_DL_LIBS} )