https://github.com/jayrambhia/Install-OpenCV
Ubuntu适用于树莓派,可以根据自己的系统和需要,自行修改脚本
更新源:
树莓派更新镜像源于镜像源推荐
https://blog.csdn.net/cduan/article/details/52594374
sudo nano /etc/apt/sources.list
用#号注释掉官方源,添加两个源连接,一个注释备用;
#deb http://archive.raspbian.org/raspbian jessie main contrib non-free rpi f$
deb http://mirror.nus.edu.sg/raspbian/raspbian wheezy main contrib non-free $
#deb http://mirrors.aliyun.com/raspbian/raspbian/ wheezy main non-free contr$
CTRL+O ,直接 Enter 确认并存盘;
CTRL+X 退出;
修改后,更新
sudo apt-get update
1、下载 安装脚本
在容器内,直接下载
git clone https://github.com/jayrambhia/Install-OpenCV.git
或网页 下载到电脑或树莓派上,再docker cp传到容器:
2、cd到脚本文件夹,下载安装必要的服务,如解压
apt-get install unzip
#[compiler]
sudo apt-get install build-essential
#[required]
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
#[optional]
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
执行脚本
chmod +x *
./opencv2_4_9.sh
3、其他系统的可以修改脚本,或者手动安装;
90M左右,下载太慢
先下到电脑再传到树莓派,
树莓派主机 docker cp 到容器:
解压进入目录:
unzip opencv-2.4.13.6.zip
cd opencv-2.4.13.6
准备编译
mkdir build
cd build
更改安装目录(先在/usr/local下新建文件夹opencv2)
注意:要在cmake最后加上 -DENABLE_PRECOMPILED_HEADERS=OFF,之前没加出错了:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv2 .. -DENABLE_PRECOMPILED_HEADERS=OFF -DWITH_FFMPEG=OFF
编译(本例树莓派3B+,选择 4核编译 -j4,或者直接 make 也行)
注意散热,风扇强制散热,温度三四十度,安装过程中,CPU飙升100%,温度上升至54度,如果不散热树莓派一般70度左右,安装时温度再升高,很容易gogo;
make -j4
sudo make install
实测Class10 金士顿32G sd卡,make -j4 耗时一个半小时多一点;
安装完成后,安装目录有4个文件夹
安装python-opencv
可直接使用apt安装
sudo apt-get install python-opencv
sudo apt-get install python-numpy
测试:
打开python,import cv模块出错:
libdc1394 error: Failed to initialize libdc1394
通过以下命令ln -s /dev/null /dev/raw1394禁用USB驱动程序,
ln -s /dev/null /dev/raw1394
再打开python2 测试,成功导入
import cv
import cv2
cv2.__version__
安装完还查看不了版本:
通过修改bashrc文件来设置PKG_ CONFIG_PATH 和 LD_LIBRARY_PATH的路径来选择对应的opencv版本
sudo nano ~/.bashrc
在文本末尾加上新编译的2.4版本的路径,也就是cmake时:CMAKE_INSTALL_PREFIX=/usr/local/opencv2
export PKG_CONFIG_PATH=/usr/local/opencv2/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/opencv2/lib
然后执行命令:
source ~/.bashrc
用pkg-config --modversion opencv 查看opencv版本的时候就是2.4版本
3.上面的这些过程并不能保证在写makefile中调用的是2.4版本的库,具体还是要在CMakeList.txt中指定要找的opencv的目录;
在使用的时候,在CMakelists.txt中,如要用2,在find_package前指明路径:
set(OpenCV_DIR /usr/local/opencv2/share/OpenCV)
find_package(OpenCV 2 REQUIRED)
用3的时候:
find_package(OpenCV 3 REQUIRED)
参考例子
测试opencv
1) 创建工作目录
mkdir ~/opencv-lena
cd ~/opencv-lena
nano DisplayImage.cpp
DisplayImage.cpp内容:
#include
#include
using namespace cv;
int main(int argc, char** argv )
{
if ( argc != 2 )
{
printf("usage: DisplayImage.out \n");
return -1;
}
Mat image;
image = imread( argv[1], 1 );
if ( !image.data )
{
printf("No image data \n");
return -1;
}
namedWindow("Display Image", WINDOW_AUTOSIZE );
imshow("Display Image", image);
waitKey(0);
return 0;
}
2、创建CMake编译文件
nano CMakeLists.txt
CMakeLists.txt内容:
cmake_minimum_required(VERSION 2.8)
#set (OpenCV_DIR "/home/pi/opencv-2.4.13.6/build")
set(OpenCV_DIR /usr/local/opencv2/share/OpenCV)
project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )
3、编译
sudo cmake .
sudo make
4、执行
此时opencv-lena文件夹中已经产生了可执行文件DisplayImage,下载lena.jpg放在opencv-lena下,运行
./DisplayImage lena.jpg
OpenCV测试完成后,可以保存修改镜像
docker commit -m="install opencv2.4 & test examples" -a="jacka654321" b26cf49aa20f jacka654321/face_recognition:v3
上传至你的dockerhub:
登录:
使用您的Docker ID登录
如果您没有Docker帐户,请在cloud.docker.com注册一个 。记下你的用户名和密码。(需注册)
登录到本地计算机上的Docker公共注册表。
docker login
发布镜像 :
将您的标记镜像上传到存储库: docker push username/repository:tag
docker push jacka654321/face_recognition:v3
https://hub.docker.com/r/jacka654321/face_recognition/
容器运行:
在容器中开发、运行facerecognition应用,我们可以利用如下的命令来启动容器。其包含了facerecognition 的完整开发环境和示例应用,并且已经安装opencv2.4.13.6。
docker run -it \
--name face_recognition_v3 \
--device /dev/vchiq \
jacka654321/face_recognition:v3 \
/bin/bash
其中,-t
选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i
则让容器的标准输入保持打开。
其中关键之处就在于将摄像头设备/dev/vchiq
挂载到容器内部,这样就可以让容器中的应用来拍摄照片和视频。
参考链接:
linux下查看opencv安装路径以及版本号
https://blog.csdn.net/zhenguo26/article/details/79627232
林帆:Docker运行GUI软件的方法
https://www.csdn.net/article/2015-07-30/2825340