gpt4 book ai didi

c++ - 如何OPENCV + CUDA + VideoCapture?

转载 作者:行者123 更新时间:2023-12-02 17:21:09 25 4
gpt4 key购买 nike

我有一台装有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;
}

CMakeLists.txt:
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} )

但是它仅使用CPU。为了使该程序使用GPU,我必须更改什么?

提前致谢。

最佳答案

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

OpenCV源库中有example code for GPU-accelerated video encoding

关于c++ - 如何OPENCV + CUDA + VideoCapture?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62148837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com