21xrx.com
2024-12-22 16:37:36 Sunday
登录
文章检索 我的文章 写文章
Linux下使用OpenCV和FFmpeg
2023-09-19 17:45:07 深夜i     --     --
Linux OpenCV FFmpeg 图像处理 视频编解码

OpenCV是一个流行的开源计算机视觉库,而FFmpeg是一个开源的跨平台的音视频处理库。在Linux系统上,使用OpenCV和FFmpeg可以实现许多有趣的应用。

首先,为了在Linux上使用OpenCV和FFmpeg,我们需要安装它们。在大多数Linux发行版上,可以使用包管理器来安装它们。以Ubuntu为例,使用以下命令来安装OpenCV和FFmpeg:


sudo apt-get install libopencv-dev ffmpeg

安装完成后,可以通过编写一些简单的代码来使用它们。

如果你想在Linux上处理视频文件,你可以使用FFmpeg来读取、转码和写入视频。下面是一个简单的示例代码,它使用FFmpeg打开一个视频文件,并将每一帧保存为图片:


extern "C"

#include <libavformat/avformat.h>

#include <libavcodec/avcodec.h>

#include <libswscale/swscale.h>

int main() {

  AVFormatContext *formatContext = avformat_alloc_context();

  avformat_open_input(&formatContext, "input.mp4", NULL, NULL);

  avformat_find_stream_info(formatContext, NULL);

  

  AVCodecParameters *codecParameters = formatContext->streams[0]->codecpar;

  AVCodec *codec = avcodec_find_decoder(codecParameters->codec_id);

  AVCodecContext *codecContext = avcodec_alloc_context3(codec);

  avcodec_parameters_to_context(codecContext, codecParameters);

  avcodec_open2(codecContext, codec, NULL);

  

  AVPacket *packet = av_packet_alloc();

  AVFrame *frame = av_frame_alloc();

  int frameCount = 0;

  while (av_read_frame(formatContext, packet) >= 0) {

    if (packet->stream_index == 0) {

      avcodec_send_packet(codecContext, packet);

      avcodec_receive_frame(codecContext, frame);

      // 保存帧为图片

      char fileName[20];

      sprintf(fileName, "frame%d.jpg", frameCount);

      av_frame_save(frame, fileName);

      frameCount++;

    }

    

    av_packet_unref(packet);

  }

  

  av_frame_free(&frame);

  av_packet_free(&packet);

  avcodec_free_context(&codecContext);

  avformat_close_input(&formatContext);

  avformat_free_context(formatContext);

  

  return 0;

}

上面的示例代码使用了FFmpeg库的函数来打开一个视频文件,并将每一帧保存为图片。你可以将上面的代码保存为一个.cpp文件,并使用以下命令编译它:


g++ -o video_processing video_processing.cpp -lavformat -lavcodec -lswscale

接下来,我们可以看看如何在Linux下使用OpenCV来处理图像。

OpenCV提供了许多函数来加载、处理和保存图像。下面是一个简单的示例代码,它使用OpenCV加载一个图像、应用一个模糊滤镜,并保存处理后的图像:


#include <opencv2/opencv.hpp>

int main() {

  cv::Mat image = cv::imread("input.jpg");

  

  // 应用模糊滤镜

  cv::GaussianBlur(image, image, cv::Size(15, 15), 0);

  

  cv::imwrite("output.jpg", image);

  

  return 0;

}

上面的示例代码使用了OpenCV的函数来加载、处理和保存图像。你可以将上面的代码保存为一个.cpp文件,并使用以下命令编译它:


g++ -o image_processing image_processing.cpp `pkg-config --cflags --libs opencv`

在本文中,我们简要介绍了如何使用OpenCV和FFmpeg来处理视频和图像。当然,OpenCV和FFmpeg还提供了许多其他功能和接口,你可以通过阅读官方文档来进一步了解它们的用法和功能。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复