linux下编译安装ffmpeg和opencv

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jacky_Ponder/article/details/53490992

OpenCV成功编译安装,进而编译算法,也成功编译生成二进制文件,但是运行时候cvCreateFileCaptureVideoCapture无法读入视频,最终原因在于ffmpeg没有配置好,删除OpenCVffmpeg重新编译ffmpegOpenCV后,视频读入成功。

FFmpegffmpeg_2.8.6.orig.tar.xz(http://www.ffmpeg.org/download.html)

Opencvopencv-2.4.9.zip

UbuntuUbuntu12.04LTS

版本的选择很重要,选择不当opencv编译时将无法识别ffmpeg

安装编译依赖包

#sudo apt-get install libgtk2.0-dev pkg-config

1ffmepg的配置与安装

文件配置:./configure --enable-shared --disable-yasm --prefix=/usr/local/ffmpeg

其中:--enable-shared 是允许其编译产生动态库,在以后的编程中要用到这个几个动态库。--prefix设置的安装目录。

(configure的时候遇到问题,它会提醒缺少--disable-yasm,照样添加即可,sudo安装也可以)

#make

#make install

export PKG_CONFIG_PATH=/usr/local/ffmpeg/lib/pkgconfig:$PKG_CONFIG_PATH

2opencv的配置与安装

#cd opencv-2.4.9/

#mkdir build

#cd build

#cmake-gui

 

#make

#make install

#gedit /etc/ld.so.conf.d/opencv.conf

加入

/usr/local/lib

执行

#ldconfig

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

 

范例:CascadeFacedetect.cpp

 

#include "stdio.h"
 
#include<opencv2/objdetect/objdetect.hpp>
 
#include<opencv2/highgui/highgui.hpp>
 
#include<opencv2/imgproc/imgproc.hpp>
 
#include<opencv2/opencv.hpp>
 
using namespace cv;
 
int main(int argc, char* argv[])
{
if(argc<2){
printf("please input enough parameter!\n");
exit(0);
}
 
CascadeClassifier faceCascade;
 
faceCascade.load( argv[1]);   //ŒÓÔØ·ÖÀàÆ÷£¬×¢ÒâÎÄŒþ·Ÿ¶
 
printf("xml read!\n");
 
Mat img, imgGray;
 
vector<Rect> faces;
 
   	VideoCapture camera1(argv[2]);
 
if(!camera1.isOpened()){
 
printf("video open fail!\n");
return 1;
}
 
    for(;;)
{
        camera1 >> img;
 
if(img.channels() ==3){
      cvtColor(img, imgGray, CV_RGB2GRAY);
   }
 
   else{
      imgGray = img;
   }
   faceCascade.detectMultiScale(imgGray, faces, 1.2, 6, 0, Size(0, 0));   //检测人脸
   if(faces.size()>0)
 
   {
      for(int i =0; i<faces.size(); i++)
      {
          rectangle(img, Point(faces[i].x, faces[i].y), Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height),
 
                  Scalar(0, 255, 0), 1, 8);    //框出人脸位置
      }
   }
 
        imshow("camera frame", img);
 
        int key = waitKey(10);
 
        if(key == 27){
 
            break;
        }
 
    }
return 0;
} 

编译:g++ CascadeFacedetect.cpp -o CascadeFacedetect `pkg-config --cflags --libs opencv`

执行:./CascadeFacedetect haarcascade_frontalface_alt2.xml Sample.avi

 

猜你喜欢

转载自blog.csdn.net/Jacky_Ponder/article/details/53490992