嵌入式ARM系统中OpenCV的移植

简介:

◆(在ubuntu中编译):
安装依赖库:sudo apt-get install build-essential manpages-dev pkg-config


安装libpng:
sudo apt-get install zlib1g-dev
sudo wget http://downloads.sourceforge.net/libpng/libpng-1.2.18.tar.gz?modtime=1179259677&big_mirror=0
sudo tar -xvzf libpng-1.2.18.tar.gz
cd libpng-1.2.18
sudo ./configure --prefix=/usr/local/libpng
sudo make
sudo make install
同样的方式安装: libjpeg     libz
注意:如果出现“/usr/bin/install: 无法创建普通文件“/usr/local/libjpeg/bin/cjpeg”: 没有该文件或目录”的这种错误,是因为无法创建相关的目录,这里需要自己手动创建: sudo mkdir -p /usr/local/libjpeg/bin/cjpeg

 

◆ ./configure --host=arm-none-linux-gnueabi --without-gtk --without-carbon   --without-quicktime --without-1394libs --without-ffmpeg --without-python --without-swig --enable-static --disable-shared --disable-apps CXX=arm-none-linux-gnueabi-g++ CPPFLAGS=-I/usr/arm-2008q3/arm-none-linux-gnueabi/include --prefix=/usr/opencv
说明:
      --host=arm-linux :指出交叉编译arm平台
      --without-gtk:忽略gtk+2.0 windows
      --without-carbon: 不使用Mac OS上的X库
      --without-quicktime
      --without-1394libs
      --without-ffmpeg
      --without-python
      --without-swig
      --enable-static :生成静态库
      --disable-shared:不生成动态库
      CXX=armv4l-unknown-linux-g++ : 指定编译工具(建议用2.95.2或者2.95.3版本)
      CPPFLAGS=-I/usr/include :OpenCV会用到一些dev的包,如png.h,jpeglib.h,大部分头文件在/usr/include下


make
make install

 

◆export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/opencv/lib/pkgconfig
接着,根据需要在/usr/opencv/lib/pkgconfig/opencv.pc的Libs项中加入参数-lpthread、-ldl之类,例如
Libs: -L${libdir} -lcv -lcxcore -lcvaux -lpthread -lrt  -lm -lpng -ljpeg -lz -lm –ldl

 

◆清除编译的中间文件和编译后的文件:
#make clean
#make distclean

 

◆编译例程drawing.c
    armv4l-unknown-linux-g++ `pkg-config --cflags --libs opencv`  drawing.c -o drawing
或者尝试(某些情况下,顺序问题可能引发undefined reference错误)
    arm-linux-g++ drawing.c -o drawing `pkg-config --cflags --libs opencv`
或着执行
    arm-linux-g++ drawing.c -o drawing -I/usr/opencv/include/opencv -L/usr/opencv/lib  -lcv -lcxcore -lpthread -lrt -lcvaux -lm -lpng -ljpeg -lz -lml -lhighgui –ldl

注意:这儿编译的程序由于没有添加gtk的支持,故而在ARM上是无法运行的,不过去掉显示相关的函数,重新编译,是可以执行的。opencv中文论坛上,有人说才vCreateImage无法连接,不过我测试的结果是可以的,highgui中,有一些非显示的函数应该可以调用。

 

◆出现缺少ldconfig是因为系统PATH中没有包括/sbin,自己添加上即可。
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/opencv/lib/pkgconfig

 

◆如果出现缺少libstdc++库的情况,可以在arm编译器目录下的lib目录中查找,拷贝到开发板中,并确保程序可以找到即可。

 

◆摄像头驱动
以我现在所用网眼V2000为例子,内核选项加入OV511驱动,并且模块加载。OpenCV程序中默认设备为/dev/video0 ,在程序中调用cvCaptureFromCAM函数可以直接获取摄像头,并采集图像。
显示:  显示直接在要显示的地方调用显示驱动函数。


本文转自feisky博客园博客,原文链接:http://www.cnblogs.com/feisky/archive/2010/04/04/1704173.html,如需转载请自行联系原作者


相关文章
|
2月前
|
Ubuntu Linux
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
216 3
|
2月前
|
Linux 网络安全 开发工具
内核实验(二):自定义一个迷你Linux ARM系统,基于Kernel v5.15.102, Busybox,Qemu
本文介绍了如何基于Linux Kernel 5.15.102版本和BusyBox创建一个自定义的迷你Linux ARM系统,并使用QEMU进行启动和调试,包括内核和BusyBox的编译配置、根文件系统的制作以及运行QEMU时的命令和参数设置。
113 0
内核实验(二):自定义一个迷你Linux ARM系统,基于Kernel v5.15.102, Busybox,Qemu
|
2月前
|
Ubuntu Windows
ARM架构安装ubuntu系统
8月更文挑战第19天
366 0
|
4月前
|
存储 Ubuntu 编译器
合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(三)
合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(三)
合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(三)
|
3月前
|
机器学习/深度学习 人工智能 计算机视觉
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
|
26天前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
32 4
|
6天前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
2月前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
WK
|
2月前
|
编解码 计算机视觉 Python
如何在OpenCV中进行图像转换
在OpenCV中,图像转换涉及颜色空间变换、大小调整及类型转换等操作。常用函数如`cvtColor`可实现BGR到RGB、灰度图或HSV的转换;`resize`则用于调整图像分辨率。此外,通过`astype`或`convertScaleAbs`可改变图像数据类型。对于复杂的几何变换,如仿射或透视变换,则可利用`warpAffine`和`warpPerspective`函数实现。这些技术为图像处理提供了强大的工具。
WK
65 1
|
2月前
|
机器人 计算机视觉
巧用 OpenCV solvePnP() 函数完成由图像坐标系到机器人坐标系的转换(二维坐标系之间的转换)
巧用 OpenCV solvePnP() 函数完成由图像坐标系到机器人坐标系的转换(二维坐标系之间的转换)
46 2
下一篇
无影云桌面