opencv中做h264編碼向下調用ffmpeg,而ffmpeg中又調用libx264,於是這也就涉及到了libx264,ffmpeg和opencv三者之間的聯合編譯
如果沒有rtsp流的抓取,直接安裝opencv即可,注意make是增加-pthread 和-lc(libpthread libc)如果需要抓取rtsp流
1、安裝x.264 否則抓取失敗,不支持x.264
1).安裝依賴的包:
sudo apt-get update sudo apt-get installbuild-essential Git-core checkinstall texi2html libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libvorbis-dev libx11-devlibxfixes-dev zlib1g-dev |
2).安裝Yasm:x264需要使用yasm來針對CPU架構進行優化,提高性能。(不需要,我們是爲了嵌入式,yasm僅針對x86 x64)
3).安裝x264:下載源代碼、編譯、安裝
x264下載:http://download.videolan.org/x264/snapshots/
cd x264
./configure --enable-static //靜態庫
make
make install
4).此時 libx264.a默認安裝在/usr/local/lib,直接編譯會出現
2、安裝ffmpeg 否則沒有實現,抓取失敗
https://www.ffmpeg.org/download.html
注意下載對應的版本,否則和opencv會不一致,用的是 1.2版本(原來下載最新版,頭文件定義不一致)
./configure --disable-asm --disable-shared--enable-static
3、用cmake-gui編譯opencv2.4.9
注意要 with ffmpeg without 1394
4.編譯程序,修改makefile,主要是makefile裏面庫的路徑,以及順序。
CC=g++
MAKE=make
CFLAGS= -Wall -D_REENTRANT-g -Wl,--no-export-dynamic
INCDIR=-I./include-I./include/lib -I/home/fyp/opencv-2.4.9/include
LIBDIR=-L/usr/local/lib-L/usr/local/share/OpenCV/3rdparty/lib -L/usr/lib/x86_64-linux-gnu-L/usr/lib/gcc/x86_64-linux-gnu/5 -L/usr/lib/x86_64-linux-gnu/oxide-qt
LIBFLAG=-Wl,-Bstatic-lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_world-Wl,--start-group -lzlib -llibjpeg -llibtiff -llibjasper -llibpng -lavformat -lavcodec -lavdevice -lavfilter -lavutil-lswscale -Wl,--end-group
LIBFLAG+=-Wl,-Bdynamic-Wl,--start-group -pthread -lrt -lc -Wl,--end-group
OBJECTS=TestDetectWaterDepthDLL.o
COMMHEAD=./include/DWDDefine.h./include/GetConfig.h ./include/WinToLinux.h
TARGET=DetectWaterDepth
ARR=/home/fyp/opencv-2.4.9/release/lib/libopencv_highgui.a /home/fyp/opencv2.4.9/release/lib/libopencv_imgproc.a /home/fyp/opencv2.4.9/release/lib/libopencv_core.a /usr/local/share/OpenCV/3rdparty/lib/liblibjpeg.a /usr/local/share/OpenCV/3rdparty/lib/liblibtiff.a /home/fyp/opencv-2.4.9/release/3rdparty/lib/liblibjasper.a /usr/local/share/OpenCV/3rdparty/lib/liblibpng.a /usr/local/ffmpeg/lib/libswscale.a /usr/local/ffmpeg/lib/libavformat.a/usr/local/ffmpeg/lib/libavfilter.a /usr/local/ffmpeg/lib/libavdevice.a/usr/local/ffmpeg/lib/libavcodec.a /usr/local/ffmpeg/lib/libavutil.a/home/fyp/x264/libx264.a /usr/local/share/OpenCV/3rdparty/lib/libzlib.a
all :$(TARGET) $(OBJECTS)
DetectWaterDepth : $(OBJECTS) $(COMMHEAD) $(CC) $(CFLAGS)$(INCDIR) $(LIBDIR) $(LIBFLAG) -o $@ $(OBJECTS) $(ARR)
TestDetectWaterDepthDLL.o : TestDetectWaterDepthDLL.cpp$(COMMHEAD)$(CC) $(CFLAGS) -c$(INCDIR) $(LIBDIR) $<
.PHONY: clean
clean:
-rm -f *.o $(TARGET)