環境安裝與准備
下載opencv3.4.1.
或者
下載opencv3.2.0.
進入到opencv所在的目錄新建目錄build
,install
安裝cmake:
apt-get install cmake-qt-gui
安裝gtk等:
apt-get install libgtk2.0-dev pkg-config
配置和生成
啟動cmake:
cmake-gui
沒有安裝的話,根據提示進行安裝即可,安裝完成后進行配置:
Configur
上圖:
Operation System --- arm-himix200-linux-gcc
gcc ---- /opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc
g++ ---- /opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-g++
點擊Configure
之后,設置安裝路徑,我的設置為:
配置CMAKE_EXE_LINKER_FLAGS:-lpthread -lrt -ldl
點擊generate
修改出錯的地方
修改1
出現錯誤:
Error 1 make[1]: *** [3rdparty/protobuf/CMakeFiles/libprotobuf.dir/all] Error 2 make: *** [all]
Error 2 #### make failed to build some targets (1 seconds) ####
解決辦法時找到3rdparty/protobuf/src/google/protobuf/common.cc
文件,添加宏定義#define HAVE_PTHREAD
:
修改2
如果上面配置了CMAKE_EXE_LINKER_FLAGS,就不會出現這個錯誤。
若沒有配置出現錯誤:
../../lib/libopencv_core.so: undefined reference to `dlclose'
../../lib/libopencv_core.so: undefined reference to `dlsym'
解決辦法時找到build
目錄下的CMakeCache.txt
文件,在原文中修改:
CMAKE_EXE_LINKER_FLAGS:STRING= -lpthread -lrt -ldl
如圖:
修改3
找不到zlib.h
這個版本的OpenCV已經包含了第三方的庫3rdparty
,
在CMAKE中加入:
修改4
CMAKE 中取消:WITH_GTK
編譯和安裝
編譯
make -j16
安裝
待編譯完成之后,執行安裝:
make install
安裝之后在設置的路徑下出現:
測試
將/install/lib/目錄下所有的lib文件拷貝到板載系統的
/lib`目錄下;
我是在qt中使用opencv,提前已經編譯好了可以在海思3519A上執行的qt,測試部分代碼如下:
void cvTest()
{
Mat img = imread("lena.jpg");
Mat grad_x;
Sobel(img, grad_x, CV_16S, 1, 0);
Mat grad_y;
Sobel(img, grad_y, CV_16S, 0, 1);
Mat gradImage = abs(grad_x) + abs(grad_y);
double minGrad, maxGrad;
minMaxLoc(gradImage, &minGrad, &maxGrad);
Mat gradImage_8U;
gradImage.convertTo(gradImage_8U, CV_8U, 255./maxGrad);
Mat thresholdedImage;//閾值化后的二值圖
threshold(gradImage_8U, thresholdedImage, 20, 255, THRESH_BINARY_INV);
imwrite("gradImage_8U.jpg",gradImage_8U);
imwrite("thresholdedImage.jpg",thresholdedImage);
}
將生成的可執行文件拷貝到板載系統上,並運行:
測試結果如下:
這里需要注意到是:
由於編譯的時候無法加入WITH_GTK
選項,因而在板卡上執行的程序無法使用函數imshow
。