開發環境: Ubuntu18.04
Jetson TX2
查看系統信息:
head -n 1 /etc/nv_tegra_release
此處Revision為Jetpack版本號。
Step1: 卸載TX2上已經安裝好的OpenCV
1 sudo apt-get purge libopencv* 2 sudo apt autoremove 3 sudo apt-get update
Step2: 安裝OpenCV依賴包
1 sudo apt-get install -y build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev 2 sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev 3 sudo apt-get install -y python2.7-dev python3.6-dev python-dev python-numpy python3-numpy 4 sudo apt-get install -y libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev 5 sudo apt-get install -y libv4l-dev v4l-utils qv4l2 v4l2ucp 6 sudo apt-get install -y curl
Step3: 下載OpenCV
安裝的OpenCV版本 version = 4.4.0
curl -L https://github.com/opencv/opencv/archive/${version}.zip -o opencv-${version}.zip curl -L https://github.com/opencv/opencv_contrib/archive/${version}.zip -o opencv_contrib-${version}.zip unzip opencv-${version}.zip unzip opencv_contrib-${version}.zip
Step4: CMake
解壓完畢后進入OpenCV目錄下
1 mkdir build 2 cd build/ 3 cmake -D WITH_CUDA=ON -D WITH_CUDNN=ON -D CUDA_ARCH_BIN="6.2" -D CUDA_ARCH_PTX="" -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${version}/modules -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_opencv_python2=ON -D BUILD_opencv_python3=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. 4 make -j4 5 sudo make install
CUDA_ARCH_BIN="6.2" 對應Jetson TX2,
OPENCV_EXTRA_MODULES_PATH為opencv_contrib解壓后文件的路徑。
前面的步驟都很順利,網上也找到了很多腳本可以自動完成下載安裝,但是在CMake這一步,每次執行指令都是直接返回,也沒有顯示錯誤信息,嘗試了幾個版本的OpenCV發現都是同樣的問題。
解決辦法:
cmake-gui
sudo apt-get install cmake-gui
啟動cmake-gui后導入源碼和build地址,按照之前的-D配置信息勾選,沒有的通過Add Entry添加。 比較關鍵的是 OPENCV_EXTRA_MODULES_PATH 需要手動添加,
可能出現的錯誤及解決辦法:
CUDA: OpenCV requires enabled 'cudev' module from 'opencv_contrib' error still exists
如果OPENCV_EXTRA_MODULES_PATH 的路徑正確,HAVE_opencv_cudev 會自動賦值為1。
Step5: 編譯安裝
cmake-gui完成后
1 sudo make -j6 2 sudo make install
另:
其實Nvidia已經提供了傻瓜式的安裝方法,但如果想按照自己的想法對OpenCV進行編譯,還是需要由源碼入手。
sudo apt-get install -y python-opencv python3-opencv
主要還是最近做的一個項目里,使用了cv2.VideoCapture中的read()方法獲取webcam的圖像,我使用的是logitech C270,大坑,在終端中出現了如下的錯誤,雖然視頻能夠正常顯示,但終端一直報錯實在是難看,查明來源后發現解決辦法竟是重新編譯OpenCV,編譯時設置 WITH_JPEG=OFF即可 。(https://stackoverrun.com/fr/q/4215173)
Corrupt JPEG data: 10 extraneous bytes before marker 0xd6 Corrupt JPEG data: 6 extraneous bytes before marker 0xd3 Corrupt JPEG data: 2 extraneous bytes before marker 0xd0 Corrupt JPEG data: 6 extraneous bytes before marker 0xd3 Corrupt JPEG data: 2 extraneous bytes before marker 0xd3 Corrupt JPEG data: 4 extraneous bytes before marker 0xd6
晚上花了幾個小時終於把問題解決了,記錄一下。
補充:原本使用的是openCV 3.2.0,在安裝了4.4.0版本后即使和JPEG一起編譯之后也沒有出現之前的錯誤信息,可能真實的原因是來自openCV 3.2.0