OpenCV成功编译安装,进而编译算法,也成功编译生成二进制文件,但是运行时候cvCreateFileCapture和VideoCapture无法读入视频,最终原因在于ffmpeg没有配置好,删除OpenCV和ffmpeg重新编译ffmpeg和OpenCV后,视频读入成功。
FFmpeg:ffmpeg_2.8.6.orig.tar.xz(http://www.ffmpeg.org/download.html)
Opencv:opencv-2.4.9.zip
Ubuntu:Ubuntu12.04LTS
版本的选择很重要,选择不当opencv编译时将无法识别ffmpeg。
安装编译依赖包
#sudo apt-get install libgtk2.0-dev pkg-config
1、ffmepg的配置与安装
文件配置:./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
2、opencv的配置与安装
#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