如何OPENCV+CUDA+视频捕获?
Howto OPENCV+CUDA+VideoCapture?
我有一台带有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 argsn");
return -1;
}
cv::Mat frame;
cv::VideoCapture cap;
cap.open(argv[1]);
if (!cap.isOpened()) {
printf("ERROR! Unable to open cameran");
return -1;
}
printf("Start grabbingn");
for (;;)
{
cap.read(frame);
if (frame.empty()) {
printf("ERROR! blank frame grabbedn");
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 JPEGn");
}
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 源代码存储库中有 GPU 加速视频编码的示例代码。
相关文章:
- 如何使用OpenCV-C++编写*.mp4视频?
- OpenCV QT,显示视频的帧(不使用while循环)
- 在 openCV 中手动停止视频
- 在macOS Mojave上尝试OpenCV视频捕获时"Abort Trap: 6"
- Opencv 加速与 CUDA 在 C++.
- 如何OPENCV+CUDA+视频捕获?
- 使用 CUDA Ubuntu 16/04 构建 C++ OpenCV 4
- 如何在OpenCV Cuda(GpuMat)中访问像素
- OpenCV CUDA 函数缺失 - 命名空间"cv:cuda"没有成员"resize"
- 使用OpenCV Cuda ORB特征检测器
- OpenCV是在没有CUDA视频解码支持的情况下建造的
- OPENCV :: CUDA GPUMAT CV_8UC1至CV_32FC1转换黑色图像
- OpenCV + CUDA + OSX Mavericks
- 无法使用 opencv cuda 调用
- 将C / ++ OpenCV程序从视频稳定程序更改为CUDA
- 没有类似于findContours的OpenCV Cuda函数吗?
- 如何在Mac OSX上编译OpenCV+CUDA(我尝试了cmake和makefile)
- OpenCV CUDA运行速度比OpenCV CPU慢
- 哪个opencv cuda库我需要运行一个简单的opencv cuda程序
- 在linux上编译一个基本的OpenCV + Cuda程序