树莓派3B+ 使用2018-10-09-raspbian-stretch.zip版本镜像
1.首先直接从opencv网站上下载opencv-3.4.0.zip和opencv_contrib-3.4.0.zip两个压缩包
2.树莓派中需要安装opencv编译运行的相关的环境
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
3. 在用户主目录下创建一个opencv的文件夹,将opencv-3.4.0.zip和opencv_contrib-3.4.0.zip解压到其中
cd opencv-3.4.0
mkdir release
cd release
4. 编译opencv源码
此处的cmake可以通过 cmake --version查看其版本,最好选择cmake-3.9版本,3.14版本下载各 .i文件会失败
#cmake安装指导
sudo apt-get remove cmake
tar -zxvf cmake-3.9.0.tar.gz
cd cmake-3.9.0
sudo apt-get install libcurl4-gnutls-dev
sudo apt-get install zlib1g-dev
./bootstrap --system-curl
sudo make && sudo make install
编译命令:
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/home/pi/opencv/opencv_contrib-3.4.0/modules -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=ON -D BUILD_EXAMPLES=ON ..
或者
sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/home/galaxy/OPENCV_3.4.0/opencv_contrib-3.4.0/modules -D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3 -D BUILD_opencv_python3=ON -D BUILD_opencv_python2=OFF -D PYTHON3_EXCUTABLE=/usr/bin/python3 -D PYTHON3_INCLUDE_DIR=/usr/include/python3.6m -D WITH_CUDA=OFF -D OPENCV_GENERATE_PKGCONFIG=ON ..
#在python3中也安装opencv3.4, python2中不安装,这样就不需要pip 安装opencv
sudo make -j4
在这里你会发现会编译失败,提示fatal error: boostdesc_bgm.i: No such file or directory 的错误
这是因为前面cmake时因为网络等原因无法下载 boostdesc 和 vgg_generated 下的 boostdesc_lbgm 和 vgg_generated 文件导致找不到文件而编译失败。所需要的文件我已经上传到https://download.csdn.net/download/zz531987464/10733083中,可以选择此种方式下载 或者 在:https://github.com/opencv/opencv_3rdparty/branches/stale?page=1
下载: “contrib_xfeatures2d_vgg_20160317” and "contrib_xfeatures2d_boostdesc_20161012"两个文件并将解压后的文件中的所有.i文件复制到
opencv_contrib-3.4.0/modules/xfeatures2d/src目录下(如果前面使用cmake-3.9版本的话会自动下载可以考虑不需要手动复制文件)
还有一种会出现opencv2/xfeatures2d/cuda.hpp: No such file or directory的编译错误时(老是出现该错误就多执行make几遍吧):
解决办法:
在CMakeLists.txt增加以下内容(里面的路径修改成自己的路径@_@):
INCLUDE_DIRECTORIES("/works/opencv-3.4.0/opencv_contrib-3.4.0/modules/xfeatures2d/include")
其CMakeLists.txt文件所在路径为:
<你的路径>/opencv-3.4.0/modules/stitching/ CMakeLists.txt
且在
opencv-3.4.0/modules/CMakeLists.txt
中也添加上面的路径
然后重新
sudo make -j4
sudo make install
sudo ldconfig
最终完成opencv的安装
简单的写一个小的demo来试验一下当前opencv的功能是否正常:
camera.cpp
#include
using namespace cv;
using namespace std;
int main(int argc, char **argv)
{
VideoCapture capture(0);
while (true)
{
Mat frame;
capture >> frame;
imshow("camera preview", frame);
waitKey(30);
}
return 0;
}
makefile
INCLUDE = $(shell pkg-config --cflags opencv)
LIBS = $(shell pkg-config --libs opencv)
SOURCES = camera.cpp
# 目标文件
OBJECTS = $(SOURCES:.cpp=.o)
# 可执行文件
TARGET = camera
$(TARGET):$(OBJECTS)
g++ -o $(TARGET) $(OBJECTS) -I $(INCLUDE) $(LIBS)
$(OBJECTS):$(SOURCES)
g++ -c $(SOURCES)
clean:
rm $(OBJECTS) $(TARGET)
# 编译规则 $@代表目标文件 $< 代表第一个依赖文件
%.o:%.cpp
g++ -I $(INCLUDE) -o $@ -c $<
make,然后在树莓派桌面版本的终端中运行./camera
该demo会打开usb摄像头并弹框进行预览,opencv安装成功并能够成功调用opencv相关库
验证python中调用opencv无错误
pi@raspberrypi:~ $ python
...
>>> import cv2
>>>
如上,输入import cv2,没有报错说明调用ok
下面再以一个简单的python调用usb camera预览视频流来验证
usbCamera.py
#!/usr/bin/env python
import cv2
capture = cv2.VideoCapture(0)
while True:
ret, frame = capture.read()
print "frame.shape: {}".format(frame.shape)
cv2.imshow("capture", frame)
if cv2.waitKey(100) & 0xff == ord("q"):
break
cv2.destroyAllWindows()
在树莓派桌面启动方式的界面上,使用串口远程或者桌面终端执行
python usbCamera.py
如果出现Gtk-WARNING **: cannot open display 错误,则 在串口端执行
$: xhost +
$: export DISPLAY=:0.0
最终执行成功,在树莓派桌面上会弹出一个usbcamera视频流预览的框子,说明python调用opencv也是成功的
最终使用rsync命令将树莓派下的/usr/local同步到电脑本地的sysroot中
sudo rsync -avz [email protected]:/usr/local sysroot/usr
再次主机重新和树莓派同步
rsync -avz [email protected]:/lib sysroot
rsync -avz [email protected]:/usr/include sysroot/usr
rsync -avz [email protected]:/usr/lib sysroot/usr
rsync -avz [email protected]:/opt/vc sysroot/opt
接下来我们可以在ubuntu的QT上编写一个opencv的使用demo,在ubuntu上编译,scp到树莓派中,在树莓派上通过串口远程执行显示
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "opencv2/opencv.hpp"
#include
#include
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
cv::VideoCapture cap("/dev/video0");
if(cap.isOpened())
{
double fps = cap.get(cv::CAP_PROP_FPS);
qDebug() << fps;
std::string windowName("camera review xxxxxx");
cv::namedWindow(windowName, cv::WINDOW_NORMAL);
while(true)
{
cv::Mat frame;
bool bSuccess = cap.read(frame);
if(!bSuccess)
{
break;
}
cv::imshow(windowName, frame);
if(cv::waitKey(10) == 27)
{
cv::destroyWindow(windowName);
break;
}
}
}
}
MainWindow::~MainWindow()
{
delete ui;
}
s1.pro
INCLUDEPATH += /home/ubuntu/raspi/sysroot/usr/local/include
LIBS += -L/home/galaxy/raspi/sysroot/usr/local/lib -lopencv_core \
-lopencv_imgproc -lopencv_imgcodecs -lopencv_highgui -lopencv_videoio \
-lQt5Test
具体实现demo可以在下面的网址上直接下载工程编译运行
https://download.csdn.net/download/zz531987464/10733250
将编译后的bin程序scp到树莓派中,树莓派启动到桌面版本上。在串口端执行 ./s1,会出现(camera review xxxxxx:538): Gtk-WARNING **: cannot open display 错误,
在串口端执行:export DISPLAY=:0.0
即可远程启动摄像头打开预览
在ubuntu上开发opencv的QT应用出现 Undefined Reference to 'qt_version_tag' 的问题时.需要修改pro文件中链接库的部分
INCLUDEPATH += /usr/include/opencv2
LIBS += /usr/lib/x86_64-linux-gnu/libopencv_dnn.so \
/usr/lib/x86_64-linux-gnu/libopencv_ml.so \
/usr/lib/x86_64-linux-gnu/libopencv_objdetect.so \
/usr/lib/x86_64-linux-gnu/libopencv_shape.so \
/usr/lib/x86_64-linux-gnu/libopencv_stitching.so \
/usr/lib/x86_64-linux-gnu/libopencv_superres.so \
/usr/lib/x86_64-linux-gnu/libopencv_videostab.so \
/usr/lib/x86_64-linux-gnu/libopencv_calib3d.so \
/usr/lib/x86_64-linux-gnu/libopencv_features2d.so \
/usr/lib/x86_64-linux-gnu/libopencv_highgui.so \
/usr/lib/x86_64-linux-gnu/libopencv_videoio.so \
/usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so \
/usr/lib/x86_64-linux-gnu/libopencv_video.so \
/usr/lib/x86_64-linux-gnu/libopencv_photo.so \
/usr/lib/x86_64-linux-gnu/libopencv_imgproc.so \
/usr/lib/x86_64-linux-gnu/libopencv_flann.so \
/usr/lib/x86_64-linux-gnu/libopencv_core.so
即可.
直接使用python3中的pip3工具直接安装opencv-python即可
sudo pip3 install opencv-python -i https://pypi.douban.com/simple/
安装完成后我们可以在 /usr/local/lib/python3.6/dist-packages 中看到相关的模块
----------------------------------------------------------------------------------------------------------------------
或者根据前面的工程中重新编译安装,具体如下(麻烦,选上面那种吧 :( ):
首先需要安装支持的numpy
首先需要安装pip3.在通过pip3安装numpy,不要使用 apt-get install python3-numpy,无法在/usr/local/lib/python3.6/dist-packages目录下生成numpy相关文件!!
需要在python3中添加cv2模块命令:
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D PYTHON3_EXECUTABLE=/usr/bin/python3 -D PYTHON3_INCLUDE_DIR=/usr/include/python3.6m -D PYTHON3_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1 -D PYTHON3_NUMPY_PATH=/usr/local/lib/python3.6/dist-packages -D INSTALL_PYTHON_EXAMPLES=ON ..
sudo make -j6
sudo make install即可(不影响前面安装的so库等)。 或者