這個過程非常坎坷
之前在PC上面編寫好了opencv處理視頻的程序,準備移植到zedboard上面
可是出現了一個看上去很簡單的錯誤:視頻文件無法打開
剛開始的想法是移植一個視頻庫就好了
於是開始上網找資料
其中查到了“習之北”的一篇博客,引用了一篇英文的blog,那篇blog講的是在linux下移植opencv,對視頻進行處理。
當時沒細想,只是感覺看上去挺靠譜的,就開始一步一步走了下來
可是沒有注意到他即使是在linux環境下移植,但依然是x86的平臺,而我的目標平臺是ARM
所以不光浪費了一天的時間,而且把自己電腦的編譯鏈給弄得亂七八糟
到最後只好系統全部重裝
然後參考教程
http://xilinx.eetrend.com/blog/4491
全部重新配置,所有庫的版本和步驟、甚至文件路徑都嚴格按照文章裏面要求的來,終於把opencv編譯通過了
編譯通過之後就是製作opencv鏡像
具體過程(可以參考我的另外一篇blog)是
(製作之前先把libstdc++.so.6和libz.so.6放進去)
cd ${opencv的lib}
dd if=/dev/zero of=opencv_lib.img bs=1M count=15
mkfs.ext2 -F opencv_lib.img
tune2fs opencv_lib.img -i 0 #取消磁盤自檢
chmod go+w opencv_lib.img
mount opencv_lib.img -o loop /mnt #得到的空鏡像掛載到/mnt(先確定/mnt下沒有別的文件!!)
cp -rf ${opencv的lib} /mnt
如cp -rf /home/zed/opencv/opencv-2.4.8/install/lib /mnt
chmod go-w opencv_lib.img
umount /mnt
製作好鏡像之後開始對程序進行交叉編譯
我之前的編譯指令是arm-xilinx-linux-gnueabi-g++ -I/home/zed/opencv/opencv-2.4.8/install/include/opencv -I/home/zed/opencv/opencv-2.4.8/install/include/opencv2 -I/home/zed/opencv/opencv-2.4.8/install/include -L/home/zed/opencv/opencv-2.4.8/install/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann -lopencv_gpu -lopencv_nonfree -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_videostab -lstdc++ -fpermissive -o video ./kaopu.c
但是現在添加了其他的庫以後系統開始報錯
提示找不到zlib這個庫,打開文件夾查看,非常確定zlib在它應該在的地方,那是什麼原因呢?
原來是我之前沒有指定把zlib包含進去,所以要修改一下交叉編譯的指令
arm-xilinx-linux-gnueabi-g++ -I/home/zed/opencv/opencv-2.4.8/install/include/opencv
-I/home/zed/opencv/opencv-2.4.8/install/include/opencv2 -I/home/zed/opencv/opencv-2.4.8/install/include -L/home/zed/opencv/opencv-2.4.8/install/lib
-lz
-lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann -lopencv_gpu -lopencv_nonfree -lopencv_photo -lopencv_stitching -lopencv_superres
-lopencv_videostab -lstdc++ -fpermissive -o video ./kaopu.c
如果還是提示找不到jpeg之類的庫,按照同樣的方法添加到編譯指令裏面就好了
但是問題是編譯出來的程序還是打不開視頻。。。
希望今天能解決吧