OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
查看: 21394|回复: 17

OpenCV+ARM/Linux+摄像头+液晶构建视觉处理系统

[复制链接]
发表于 2008-4-8 21:29:50 | 显示全部楼层 |阅读模式
最近有些进展,和大家交流、探讨下……
1、OpenCV库以及应用程序编译
  1. ./configure --host=arm-linux --without-gtk --without-carbon --without-v4l --without-quicktime --without-1394libs --without-ffmpeg --without-python --without-swig --enable-static --disable-shared --disable-apps CXX=armv4l-unknown-linux-g++ CPPFLAGS=-I/usr/include
复制代码
(参考gomo1234的帖子 )

--host=arm-linux :指出交叉编译arm平台
--without-gtk:忽略gtk+2.0 windows(以下具体参见./configure --help 选项说明)
--without-carbon
--without-v4l
--without-quicktime
--without-1394libs
--without-ffmpeg
--without-python
--without-swig
--enable-static :生成静态库
--disable-shared:不生成动态库
CXX=armv4l-unknown-linux-g++ : 指定编译工具
CPPFLAGS=-I/usr/include  :OpenCV会用到一些dev的包,如png.h,jpeglib.h,大部分头文件在/usr/include下。
如果在编译时出现png.h: No such file or directory ,意即缺少开发包,比如在Debian下可以apt-get install libpng2-dev,或者到libpng的网站http://www.libpng.org/pub/png/libpng.html,编译安装开发包即可。
  1. make
  2. make install
复制代码
编译drawing:
  1. armv4l-unknown-linux-g++ -L/usr/local/lib -I/usr/local/include/opencv  drawing.c -o drawing -lhighgui -lcv -lcxcore -lcvaux -lpthread -lm
复制代码
编译修改后的摄像头标定程序:
  1. armv4l-unknown-linux-g++ -I/usr/local/include/opencv  -L/usr/local/lib -o calibration calibration.cpp -lhighgui -lcv -lcxcore -lcvaux -lpthread
复制代码
(pkg-config方法没太用明白,恳请大侠指点……)
将生成的可执行程序拷贝到开发板上,运行。如果出现缺少libstdc++库的情况,可以在arm编译器目录下的lib目录中查找,拷贝到开发板中,并确保程序可以找到即可。
2、摄像头驱动
以我现在所用网眼V2000为例子,内核选项加入OV511驱动,并且模块加载。OpenCV程序中默认设备为/dev/video0 ,在程序中调用cvCaptureFromCAM函数可以直接获取摄像头,并采集图像。
3、显示
暂时没用OpenCV的显示函数,直接在要显示的地方调用了自己写的液晶驱动函数,直接对 IplImage数据结构作显示。

现在虽然可以把平台搭建起来,但是感觉运行速度非常慢,每秒2偵的速度,貌似还要优化,不知有多大潜力!?还有后续要是做应用能有什么可以作的呢!?
回复

使用道具 举报

发表于 2008-4-9 09:23:06 | 显示全部楼层

OpenCV+ARM/Linux+摄像头+液晶构建视觉处理系统

不错的内容,我将之放到这个页面了
<!-- m --><a class=\"postlink\" href=\"http://www.opencv.org.cn/index.php?title=%E5%B5%8C%E5%85%A5%E5%BC%8FARM%E7%B3%BB%E7%BB%9F%E4%B8%AD%E5%AE%89%E8%A3%85\">http://www.opencv.org.cn/index.php?titl ... 9%E8%A3%85</a><!-- m -->
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-13 15:44:20 | 显示全部楼层

OpenCV+ARM/Linux+摄像头+液晶构建视觉处理系统

不错的内容,我将之放到这个页面了
<!-- m --><a class=\"postlink\" href=\"http://www.opencv.org.cn/index.php?title=%E5%B5%8C%E5%85%A5%E5%BC%8FARM%E7%B3%BB%E7%BB%9F%E4%B8%AD%E5%AE%89%E8%A3%85\">http://www.opencv.org.cn/index.php?titl ... 9%E8%A3%85</a><!-- m -->
呵呵~Thanks~
不过现在遇到各种问题~!!比如
1、cvRound运行有问题~,返回值不正确
2、有用到IPP库的就出问题了,不知道在理论上OpenCV是否可以正常运行于非Intel平台,cxcore测试和cv测试都没跑过!!
回复 支持 反对

使用道具 举报

发表于 2008-4-14 08:55:35 | 显示全部楼层

OpenCV+ARM/Linux+摄像头+液晶构建视觉处理系统

[quote=&quot;Shiqi Yu&quot;:27ry8nyt]不错的内容,我将之放到这个页面了
<!-- m --><a class=\"postlink\" href=\"http://www.opencv.org.cn/index.php?title=%E5%B5%8C%E5%85%A5%E5%BC%8FARM%E7%B3%BB%E7%BB%9F%E4%B8%AD%E5%AE%89%E8%A3%85\">http://www.opencv.org.cn/index.php?titl ... 9%E8%A3%85</a><!-- m -->
呵呵~Thanks~
不过现在遇到各种问题~!!比如
1、cvRound运行有问题~,返回值不正确
2、有用到IPP库的就出问题了,不知道在理论上OpenCV是否可以正常运行于非Intel平台,cxcore测试和cv测试都没跑过!![/quote:27ry8nyt]
测试一下cxcore和cv吧,特别是cxcore。
下面是cvRound代码
  1. CV_INLINE  int  cvRound( double value )
  2. {
  3. #if CV_SSE2
  4.     __m128d t = _mm_load_sd( &value );
  5.     return _mm_cvtsd_si32(t);
  6. #elif defined WIN32 && !defined WIN64 && defined _MSC_VER
  7.     int t;
  8.     __asm
  9.     {
  10.         fld value;
  11.         fistp t;
  12.     }
  13.     return t;
  14. #elif (defined HAVE_LRINT) || (defined WIN64 && !defined EM64T && defined CV_ICC)
  15.     return (int)lrint(value);
  16. #else
  17.     /*
  18.      the algorithm was taken from Agner Fog\'s optimization guide
  19.      at http://www.agner.org/assem
  20.      */
  21.     Cv64suf temp;
  22.     temp.f = value + 6755399441055744.0;
  23.     return (int)temp.u;
  24. #endif
  25. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-16 17:16:56 | 显示全部楼层

OpenCV+ARM/Linux+摄像头+液晶构建视觉处理系统

cvRound 的代码我看了,最后没办法把那个一大串数字去掉了,就继续往前走,不过感觉是宏定义不对导致的,怎么32位的平台却要用64位的结构,不知道是哪里出错!
现在正在做cxcore测试:
  1. Engine: CxTest 0.1
  2. Execution Date & Time: Tue Oct  9 08:43:40 2029
  3. Config File: (null)
  4. Tested Libraries: cxcore: 1.0.0
  5. Optimized Low-level Plugin\'s:
  6. =================================================
  7. OpenCV ERROR: One of arguments\' values is out of range (Negative or too large argume)
  8.         in function cvAlloc, cxalloc.cpp(113)
  9. Terminating the application...
  10.         called from cvRelease, cxpersistence.cpp(5004)
  11. Terminating the application...
复制代码
以前作的时候也是出这个问题,就没有继续,我调试了下cvAlloc函数:
(size_t)size = 112;
CV_MAX_ALLOC = 2.000000;
(size_t)size = 0;
CV_MAX_ALLOC = 2.000000;
(size_t)size = 112;
CV_MAX_ALLOC = 2.000000;
(size_t)size = 0;
CV_MAX_ALLOC = 2.000000;
(size_t)size = 112;
CV_MAX_ALLOC = 2.000000;
(size_t)size = 1296039968;
CV_MAX_ALLOC = 2.000000;
发现每次都是开辟一个很大的内存的时候出问题,而且这个结果是随机的~也就是说不知道是哪个函数出问题,怀疑是否跟内存泄露有关,看了chai的帖子,还是没有头绪!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-16 19:15:16 | 显示全部楼层

OpenCV+ARM/Linux+摄像头+液晶构建视觉处理系统

每次运行出错信息不太一样,出现的三种错误:
种类一:
OpenCV ERROR: Unsupported format or combination of formats (Invalid matrix type)
        in function cvCreateMatHeader, cxarray.cpp(140)
Terminating the application...
种类二:
OpenCV ERROR: One of arguments\' values is out of range (Negative or too large argume)
        in function cvAlloc, cxalloc.cpp(113)
Terminating the application...
        called from cvRelease, cxpersistence.cpp(5004)
Terminating the application...
种类三:
OpenCV ERROR: Insufficient memory (Out of memory)
        in function cvAlloc, cxalloc.cpp(118)
Terminating the application...
        called from cvRelease, cxpersistence.cpp(5004)
Terminating the application...
就这个能看懂,内存不够!内存泄露!?!貌似是因为程序异常退出,所以执行了几次,内存一直泄露到不够用!!?
回复 支持 反对

使用道具 举报

发表于 2009-3-18 19:30:50 | 显示全部楼层

OpenCV+ARM/Linux+摄像头+液晶构建视觉处理系统

我现在也跟踪到cvRound()这里来了。
我修改了cvRound,如下:
  1. CV_INLINE  int  cvRound( double value )
  2. {
  3.     return (int)(value + 0.5);
  4. #
复制代码
光是这样,我在程序中调用cvRound函数都会出错。
从打印它的结果来看,应该溢出
可是我怎么也想不出原因!

ps:我直接在我的程序中定义一个同样的cvRound()函数,调用
结果是没问题的。

不懂,想请教下!(我也是在arm下运行的)
回复 支持 反对

使用道具 举报

发表于 2009-3-18 23:18:52 | 显示全部楼层

OpenCV+ARM/Linux+摄像头+液晶构建视觉处理系统

你这种改法太粗暴,肯定是不行的。之所以opencv原来的cvRound函数会出错,是因为opencv采用的round算法是一种比较通用的32位x86处理器上的浮点算法,lua中就用的这套。为什么要加这么长的定语呢,因为该算法的实现跟double类型在CPU中每个bit的存放位置有关,所以不同的CPU,这套算法就可能会失效。
你这种改法,既没有考虑正负数、也没有考虑溢出。
如果要全面,一般就三种思路:
1、借助浮点协处理器,当然,这要求你的CPU有浮点协处理器,并且有相关操作指令,那么自己用汇编写
2、借助目标平台操作系统或编译器实现的内部接口
3、自己软件模拟浮点运算,汇编
我现在也跟踪到cvRound()这里来了。
我修改了cvRound,如下:
  1. CV_INLINE  int  cvRound( double value )
  2. {
  3.     return (int)(value + 0.5);
  4. #
复制代码
光是这样,我在程序中调用cvRound函数都会出错。
从打印它的结果来看,应该溢出
可是我怎么也想不出原因!

ps:我直接在我的程序中定义一个同样的cvRound()函数,调用
结果是没问题的。

不懂,想请教下!(我也是在arm下运行的)
回复 支持 反对

使用道具 举报

发表于 2009-3-30 14:32:36 | 显示全部楼层

OpenCV+ARM/Linux+摄像头+液晶构建视觉处理系统

楼主你好!!我按照你的方法编译通过了 但是我把可执行文件下到板子上运行 系统出错:not found 意思是没有找到我的可执行文件 但是我的那个文件明明在那个目录下面的啊??这到底是为什么??恳请各位老师解答!!
回复 支持 反对

使用道具 举报

发表于 2009-4-11 02:15:49 | 显示全部楼层

OpenCV+ARM/Linux+摄像头+液晶构建视觉处理系统

楼主你好,我也是照你方法做的,但出现了一些问题,说error: C++ compiler cannot create executables

具体如下:
[root@bogon opencv-1.0.0]# ./configure --host=arm-linux --without-gtk --without-carbon  --without-quicktime --without-1394libs --without-ffmpeg --without-python --without-swig --enable-static --disable-shared --disable-apps CXX=armv4l-unknown-linux-g++ CPPFLAGS=-I/usr/include
configure: WARNING: If you wanted to set the --build type, don\'t use --host.
    If a cross compiler is detected then cross compile mode will be used.
checking build system type... i686-pc-linux-gnu
checking host system type... arm-unknown-linux-gnu
checking target system type... arm-unknown-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for arm-linux-strip... arm-linux-strip
checking whether make sets $(MAKE)... (cached) yes
checking for arm-linux-g++... armv4l-unknown-linux-g++
checking for C++ compiler default output file name... configure: error: C++ compiler cannot create executables
See `config.log\' for more details.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-4-29 06:22 , Processed in 0.010461 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表