已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 下载 opencv 的源文件当前是 0.9.9,并解压缩 2、 在工作路径运行配置命令 ./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=arm-linux-g+ CPPFLAGS=-I/opt/crosstools/gcc-3.4.6-glibc-2.3/ - prefix=/usr/opencv/ CPPFLAGS 所指的头文件和库文件位置应当是 arm 编译器的所对应的路径,否则会出 现编译异常,对宏 FD_ZERO 的识别问题。 3、 执行 make,make insatall,这时在/usr/opencv 下生成相应的文件。 为了加入 gtk 的支持 使用下面的 ./configure -host=arm-linux -prefix=$PREFIX -without-carbon -without-quicktime - without-1394libs -without-ffmpeg -without-python -without-swig -enable-static -disable- shared -disable-apps CXX=arm-linux-g+ CPPFLAGS=-I/opt/gtkdfb/usr/local/include 参数 CPPFLAGS=-I/opt/gtkdfb/usr/local/include 只要指明了 gtk 相关库的位置 GTHREAD_CFLAGS = -pthread -I/opt/gtkdfb/usr/local/include/glib-2.0 - I/opt/gtkdfb/usr/local/include/glib-2.0/glib GTHREAD_LIBS = -pthread -lgthread-2.0 -lglib-2.0 GTK_CFLAGS = -DXTHREADS -D_REENTRANT -DXUSE_MTSAFE_API - I/opt/gtkdfb/usr/local/include/gtk-2.0-I/opt/gtkdfb/usr/local/gtk-2.0/gtk -I/opt/gtkdfb/usr/local/gtk- 2.0/gdk -I/opt/gtkdfb/usr/local/gtk-2.0/gdk-pixbuf -I/opt/gtkdfb/usr/local/include/atk-1.0/atk - I/opt/gtkdfb/usr/local/include/pango-1.0/pango -I/opt/gtkdfb/usr/local/include/freetype2/freetype - I/opt/gtkdfb/usr/local/include/freetype2/freetype/config -I/opt/gtkdfb/usr/local/include/glib-2.0 - I/opt/gtkdfb/usr/local/include/glib-2.0/glib GTK_LIBS = -Wl,-export-dynamic -lgtk-2.0 -lgdk-2.0 -latk-1.0 -lpangoxft-1.0 -lpangox-1.0 - lpango-1.0 -lgdk_pixbuf-2.0 -lm -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 实际编译采用的过程 1、 下载 opencv 的源文件当前是 1.0.0,并解压缩 2、 修改 configure 文件设置 GTK 的安装路径 3、 export PERFIX=/用户的指定安装路径 4、 ./configure -host=arm-linux -prefix=$PREFIX -without-carbon -without-quicktime - without-1394libs -without-ffmpeg -without-python -without-swig -disable-static -enable- shared -disable-apps CXX=arm-linux-g+ CPPFLAGS=-I/opt/gtkdfb/usr/local/include 5、 make 6、 make install 7、 拷贝 opencv.pc 到指定的 PKG_CONFIG_PATH 变量所指定的路径中 8、 转到源程序路径/安装路径 /share/opencv/samples/c,使用下面的命令编译程序 9、 arm-linux-g+ pkg-config -cflags -libs opencv gtk+-2.0 gthread-2.0 pangoft2 libxml-2.0 drawing.c -o drawing 10、 把程序挂载到开发板上,使用下面的 shell 文件执行开发的程序 #bin/sh #export QTDIR=$PWD export TSLIB_ROOT=/opt/gtkdfb/usr/local export LD_LIBRARY_PATH=$PWD/lib:/lib:/opt/opencv/lib export TSLIB_TSDEVICE=/dev/input/tslib0 export TSLIB_PLUGINDIR=$PWD/lib/ts export TSLIB_CONSOLEDEVICE=none export QT_TSLIBDIR=$PWD/lib export TSLIB_CONFFILE=$PWD/etc/ts.conf export POINTERCAL_FILE=$PWD/etc/ts-calib.conf export TSLIB_CALIBFILE=$PWD/etc/ts-calib.conf export PKG_CONFIG_PATH=$PWD/lib/pkgconfig export TSLIB_FBDEVICE=/dev/fb0 export LD_PRELOAD=$PWD/lib/libts.so #/root/touchscream/bin/ts_calibrate #$PWD/bin/ts_print_raw export exec_prefix=$PWD #./arrow #./calendar ./drawing 11、 出现错误 libstdc+.so.6: cannot open shared object file: No such file or directory 拷贝 文件到库文件路径 问题:在使用拉普拉斯是出现下面的问题: Formats of input arguments do not match (Laplacian can either transform 8u-16s, or 8u-32f, or 32f-32f. The channel number must be the same.) 原因:Laplace 变换的输入和输出必须满足提示中所要求的的关系。 问题:今天移植 opencv 算法到 arm-270 的板子上,用 arm-linux 编译室没有问 题了。做了个简单的边缘提取 demo(canny 算法),同样的代码,在 PC 机上运 行时能看到正确的边缘图片,而用 arm-linux 编译后就保存的图片就全是黑的。 源码如下: #include #include #include int main(int argc, char* argv) /声明 IplImage 指针 IplImage* src = NULL; IplImage* dst = NULL; if( argc = 2 dst = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1); cvCanny(src,dst, 50, 150, 3); cvSaveImage(“result.jpg“, dst); cvReleaseImage( cvReleaseImage( return 0; 各位帮忙分析一下是什么原因造成这种现象的。 以前在就发现过一个问题,gcc 编译器默认是单字节对齐,而 arm-linux-gcc 默认是双字节对齐。 回答: 你可以先用 cxcoretest, cvtest 检测一下函数是否能够正常工作。 谢谢楼主的回答,问题大概找到了,出在几个函数里面 cvRound cvFloor cvCeil, PC 机和 arm 上面返回值完全不同。在 arm 平台,调用 vcCanny 算法 里有用到 cvRound 函数,经过取整后全变成了 255,所以图片出来全是黑的。 问题出在 cvRound 返回值处,具体分析如下: typedef union Cv64suf int64 i; uint64 u; double f; Cv64suf; int cvRound( double value ) #if 1 Cv64suf temp; temp.f = value + 6755399441055744.0; printf(“f = %f, %d, %dn“, temp.f, (int)(temp.u 32), (int)(temp.u return (int)temp.u; #endif 在两种平台:pc (g+ 编译)和 arm(arm-linux 编译) ,打印的结果不同 cvRound(3.4678) ; PC: f = 675539944105547.00000, 1127743488, 3 arm:f = 675539944105547.00000, 3, 1127743488 也就是说又 64 位转 32 位时,内存中的数据高 32 位和低 32 位刚好相反。 原因是找到了。我修改了 cvRound 算法,使其返回值为 return (int) (value +0.5) ,重新编译后所有的 opencv 算法都能在 arm 上运行正常了。唯一不足的 就是 270 硬件不支持浮点运算,计算速度很慢。 至于造成这种不同的原因就有可能是 CPU 体系架构不同造成的。具体我也说不 上来,不知道是否可以通过添加编译器的选项来解决。 我把原来的 CV_INLINE int cvRound( double value ) 注释掉,改成: 代码: 全选 inline int cvRound(double value) if(value=0) return (int)(value+0.5); else return (int)(value-0.5); 程序倒是都可以运行了,但是担心这样改会对运行效率有比较大的影响. 不知哪位有没有更高效的改法? 操作系统:vmware6.5+ubuntu8.04 工具链:arm-linux 2.95.3 目标:gec2410+NEC3.5 opencv 选用版本 opencv1.0。 $ tar zxvf opencv-1.0.0.tar.gz $ cd ./opencv-1.0.0 在配置编译前,我们需要更改一下./cxcore/include/cxtypes.h 文件。由于我们 的运行平台是 arm,这与 x86 的大小端工作不同。如果不修改这文件,在进行 一些会调用 cvRound 函数的函数时候,回出现黑屏现象。 $vim ./cxcore/include/cxtypes.h/cxtypes.h 找到如下程序段: Cv64suf temp; temp.f = value + 6755399441055744.0; return (int)temp.u; 把返回值修改为:return (int) ( value + 0.5) 实际使用的算法是这个方法 设定环境变量:$ export PATH=/usr/local/arm/2.95.3/bin:$PATH 进入解压后的 opencv 目录,进行编译配置。 $ ./configure -host=arm-linux -without-gtk -without-carbon -without- quicktime -without-1394libs -without-python -without-swig -enable-static - disable-shared -disable-apps CXX=arm-linux-g+ CPPFLAGS=-I/usr/include prefix=/opt/opencv-arm $make $make install (此操作要为超级用户,使用 sudo make install 时候要注意一下, 由于 sudo 后的操作,转为超级用户,同时环境也是超级用户的,所以可能会 出现工具链没找到等错误信息。我们可以先使用$ sudo su 切换超级用户,再 设定环境变量,然后使用 make install) 把/opt/opencv-arm/lib 下的库放到开发扳上就可以了。 问题:使用 motempl 程序时出现下面的错误提示: Corrupt JPEG data: 42 extraneous bytes before marker 0xfe Corrupt JPEG data: 42 extraneous bytes before marker 0xfe Corrupt JPEG data: 42 extraneous bytes before marker 0xfe Corrupt JPEG data: 703 extraneous bytes before marker 0xd9 Corrupt JPEG data: premature end of data segment Corrupt JPEG data: bad Huffman code Corrupt JPEG data: 42 extraneous bytes before marker 0xfe Corrupt JPEG data: 42 extraneous bytes before marker 0xfe Corrupt JPEG data: premature end of data segment Corrupt JPEG data: 173 extraneous bytes before marker 0xd9 Corrupt JPEG data: premature end of data segment Corrupt JPEG data: 587 extraneous bytes before marker 0xd9 Corrupt JPEG data: premature end of data segment Corrupt JPEG data: 300 extraneous bytes before marker 0xd9 Corrupt JPEG data: premature end of data segment Corrupt JPEG data: premature end of data segment HIGHGUI ERROR: V4L: setting property #6 is not supported diff 和 patch 是一对工具,在数学上来说,diff 是对两个集合的差运算,patch 是对两个集合的和运算。 diff 比较两个文件或文件集合的差异,并记录下来,生成一个 diff 文件,这也是我们常说的 patch 文件,即补丁文 件。 patch 能将 diff 文件运用于 原来的两个集合之一,从而得到另一个集合。举个例子来说文件 A 和文件 B,经过 diff 之后生成了补丁文件 C,那么着个过程相当于 A -B = C ,那么 patch 的过程就是 B+C = A 或 A-C =B。 因此我们只要能得到 A, B, C 三个文件中的任何两个,就能用 diff 和 patch 这对工具生成另外一个文件。 这就是 diff 和 patch 的妙处。下面分别介绍一下两个工具的用法: 1. diff 的用法 diff 后面可以接两个文件名或两个目录名。 如果是一个目录名加一个文件名,那么只作用在那么个目录下的同名 文件。 如果是两个目录的话,作用于该目录下的所有文件,不递归。如果我们希望递归执行,需要使用-r 参数。 命令 diff A B C ,一般 A 是原始文件,B 是修改后的文件,C 称为 A 的补丁文件。 不加任何参数生成的 diff 文件格式是一种简单的格式,这种格式只标出了不一样的行数和内容。我们需要一种更详 细的格式,可以标识出不同之处的上下文环境,这样更有利于提高 patch 命令的识别能力。这个时候可以用-c 开关。 2. patch 的用法 patch 用于根据原文件和补丁文件生成目标文件。还是拿上个例子来说 patch A C 就能得到 B, 这一步叫做对 A 打上了 B 的名字为 C 的补丁。 之一步之后,你的文件 A 就变成了文件 B。如果你打完补丁之后想恢复到 A 怎么办呢? patch -R B C 就可以重新还原到 A 了。 所以不用担心会失去 A 的问题。 其实 patch 在具体使用的时候是不用指定原文件的,因为补丁文件中都已经记载了原文件的路径和名称。patch 足 够聪明可以认出来。但是有时候会有点小问题。比如一般对两个目录 diff 的时候可能已经包含了原目录的名字,但是我 们打补丁的时候会进入到目录中再使用 patch,着个时候就需要你告诉 patch 命令怎么处理补丁文件中的路径。可以利 用-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园水磨石地面安全施工方案
- 09选择题排除法-备战2023年高考地理题型能力专题突破(解析版)
- 2024年区块链技术应用合同:规定区块链技术开发与应用过程中的权益
- 高层建筑多孔页岩砖外墙保温施工方案
- 机械设备安装临时用电方案
- 2024年空气涡轮制冷精细橡胶粉生产装置项目综合评估报告
- 2024年园艺护栏安装合同
- 2024年片式电容项目评估分析报告
- 2024年分居协议代理处理合同
- 2023年医用耗材项目成效分析报告
- 汽车美容装潢技术电子教案 2.2-汽车内部清洗护理
- 2023年中国铁塔招聘笔试真题
- 常规弱电系统施工单价表纯劳务
- 中小学学校人防、物防、技防落实方案
- 2024年代持法人报酬协议书模板范本
- 2024年人教版六年级数学上册《第5单元第7课时 扇形的认识》单元整体教学课件
- 2023湖南文艺出版社五年级音乐下册全册教案
- 2024-2025学年苏教版小学四年级上学期期中英语试题及解答参考
- 国开2024秋《形势与政策》专题测验1-5参考答案
- DLT 5707-2014 电力工程电缆防火封堵施工工艺导则
- 广东省佛山市南海区2024年七年级上学期期中数学试题【附参考答案】
评论
0/150
提交评论