raspberry+opencv+libdmtx

raspberry pi安装opencv与libmdtx库

  • 0. 参考内容
  • 1. 树莓派安装opencv
  • 2 CMakeLists.txt写法
  • 3. libdmtx导入
  • 4. 存在的问题

本文记录了自己在raspberry pi中安装opencv与dmtx库过程。仅做个人记录,或许还可以帮到其他朋友。如需转载,请注明本文地址。

0. 参考内容

  1. opencv在raspberry下安装:https://www.learnopencv.com/install-opencv-4-on-raspberry-pi/
  2. libdmtx下载:https://github.com/dmtx/libdmtx
  3. cmake入门: https://pan.baidu.com/s/1UXO4dy-TSkTHOmvV1McQtg 提取码: 2dd6

1. 树莓派安装opencv

# 清理空间。opencv安装基本占满了空间。
sudo apt-get -y purge wolfram-engine
sudo apt-get -y purge libreoffice*
sudo apt-get -y clean
sudo apt-get -y autoremove

cvVersion="master"

# Clean build directories
rm -rf opencv/build
rm -rf opencv_contrib/build

# Create directory for installation
mkdir installation
mkdir installation/OpenCV-"$cvVersion"
cwd=$(pwd)

# Step 1: Update Packages
sudo apt -y update
sudo apt -y upgrade

#Step 2: Install OS Libraries
sudo apt-get -y remove x264 libx264-dev

## Install dependencies
sudo apt-get -y install build-essential checkinstall cmake pkg-config yasm
sudo apt-get -y install git gfortran
sudo apt-get -y install libjpeg8-dev libjasper-dev libpng12-dev
sudo apt-get -y install libtiff5-dev
sudo apt-get -y install libtiff-dev
sudo apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev
sudo apt-get -y install libxine2-dev libv4l-dev
cd /usr/include/linux
sudo ln -s -f ../libv4l1-videodev.h videodev.h
cd $cwd

sudo apt-get -y install libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
sudo apt-get -y install libgtk2.0-dev libtbb-dev qt5-default
sudo apt-get -y install libatlas-base-dev
sudo apt-get -y install libmp3lame-dev libtheora-dev
sudo apt-get -y install libvorbis-dev libxvidcore-dev libx264-dev
sudo apt-get -y install libopencore-amrnb-dev libopencore-amrwb-dev
sudo apt-get -y install libavresample-dev
sudo apt-get -y install x264 v4l-utils

# Optional dependencies
sudo apt-get -y install libprotobuf-dev protobuf-compiler
sudo apt-get -y install libgoogle-glog-dev libgflags-dev
sudo apt-get -y install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen

# Step 3. 安装python相关环境,不装也行吧。保险起见装上其中一部分,肯定不需要虚拟环境
sudo apt-get -y install python3-dev python3-pip
sudo -H pip3 install -U pip numpy
sudo apt-get -y install python3-testresources


# Step 4: Download opencv and opencv_contrib
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout $cvVersion
cd ..

git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib
git checkout $cvVersion
cd ..

#Step 5: Compile and install OpenCV with contrib modules
cd opencv
mkdir build
cd build
# 注意这一步cmake需要好久才能通过,而且会卡在某个安装好久,慢慢等着就好。
cmake -D CMAKE_BUILD_TYPE=RELEASE \
            -D CMAKE_INSTALL_PREFIX=$cwd/installation/OpenCV-"$cvVersion" \
            -D INSTALL_C_EXAMPLES=ON \
            -D INSTALL_PYTHON_EXAMPLES=ON \
            -D WITH_TBB=ON \
            -D WITH_V4L=ON \
            -D OPENCV_PYTHON3_INSTALL_PATH=$cwd/OpenCV-$cvVersion-py3/lib/python3.5/site-packages \
        -D WITH_QT=ON \
        -D WITH_OPENGL=ON \
        -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
        -D BUILD_EXAMPLES=ON .
# 然后就是漫长的编译,用时约4-6小时,而且中途可能会断掉。继续开始就好。
# 1.需要注意/dev/root是不是快满了。基本编译过程中是满的
# 2.在100%时编译Canny_Detector_Demo会卡好久,慢慢等着。
# 3.之前需要对卡进行扩展,避免只是用4G部分
# 4.可以通过 $ df -h 查看空间使用情况; 使用 du --max-depth=1 查找当前路径大文件

# Step 6: Reset swap file
# 注意需要修改swap空间大小,否则会在编译100%时卡死。
sudo vim /etc/dphys-swapfile
CONF_SWAPSIZE=100 改成 1024
# 重启交换服务
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start

# Step 7:开始编译
make -j$(nproc)		# 编译线程。建议几核的就使用几线程。在我的pi等价于 make -j4
make install

# Finally, we also need to add a simple statement to make sure that VideoCapture(0) works on our Raspberry Pi.
echo "sudo modprobe bcm2835-v4l2" >> ~/.profile

2 CMakeLists.txt写法

mkdir piOpencv
cd piOpencv
mkdir build
mkdir src 	# 存储源文件
mkdir libs	# 存储库

创建CMakeLists.txt

cmake_minimum_required(VERSION 3.1)
PROJECT(piShowImg)
ADD_SUBDIRECTORY(src bin)

将opencv头文件考到工程中!否则找头文件找的非常混乱。

cd /usr/include/opencv2			# 头文件路径
sudo tar -cvf include.tar *		# 文件打包

然后拷贝到工程路径中src的include下。
编辑opencv.hpp头文件,将里面不需要的头文件删掉。实际使用时 ml.hpp, photo.hpp等由于路径问题找不到,删掉就好,反正也用不到。

将相应库文件也拷贝过来。这个路径在:

cd /usr/lib/arm-linux-gnueabihf

这个路径是怎么发现的呢?其实之前通过了cmake编译,然后使用 ldd piOpencv指令查看连接关系,发现连接到了这里。于是拷过去(到libs)。(只拷贝 opencv_core opencv_highgui opencv_imgproc即可)。

注!
如果将~/installation/下的头文件和库考进去,会出现问题,cmake和make都可以通过,但是运行时imshow函数会崩掉,个人感觉是库版本和头文件对应关系。所以不要用这边的库。所以用上面那个路径的。

之后编辑src路径下的CMakeLists.txt。注意这时候还不应该包含dmtx.a。

# ADD this line should be before target_link_libraries line...
ADD_EXECUTABLE(piShowImg main.cpp)

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
# this line is not necessary. WHY?
# link_directories(${CMAKE_CURRENT_SOURCE_DIR}/libs)

# do not need full librariy names.
target_link_libraries(piShowImg opencv_core opencv_highgui opencv_imgproc dmtx.a)
# target_link_libraries(piShowImg libopencv_core.so libopencv_highgui.so libopencv_imgproc.so dmtx)

然后可以使用基本的opencv操作。

3. libdmtx导入

通过https://github.com/dmtx/libdmtx下载libdmtx-master.zip并解压,进入目录安装里面的"README"进行安装即可。简单记录如下:

  1. 安装automake, libtool, pkg-config三个依赖项。直接 “$sudo apt-get install xxx” 即可。
  2. 执行 ./autogen.sh 生成./config文件
  3. $./config
  4. $make
  5. $sudo make install

之后将libdmtx-master中的 libdmtx.a libdmtx.so libdmtx.so.xx.xx等打包,同样放到libs文件中。
在CMakeLlists里面加上 “dmtx.a” 链接库。

4. 存在的问题

  1. 怀疑CMakeLists里面的库路径并没有加进去,因为直接导入dmtx时找不到,还是又走了一遍安装
  2. 不知道opencv安装后产生的installation文件有什么用。也没有注意最开始安装前在 /usr/lib/arm-linux-gnueabihf 目录下是否有opencv的库,以及/usr/include中是否有opencv的头文件。

总结:乱七八糟的,算是能用了吧。

你可能感兴趣的:(嵌入式,OpenCV)