问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

opencv不用把库放到开发板上吗

发布网友 发布时间:2022-04-08 03:52

我来回答

2个回答

懂视网 时间:2022-04-08 08:14

#include <stdio.h>
#include "platform.h"
#include "xil_types.h"
#include "xgpio.h"
#include "xparameters.h"
#include "xgpiops.h"
#include "xil_io.h"
#include "oled.h"
//extern char inbyte(void);//调用inbyte接收一个字节输入函数
extern XGpioPs_Config XGpioPs_ConfigTable[XPAR_XGPIOPS_NUM_INSTANCES];
//int
main()
{
 static XGpioPs psGpioInstancePtr;
 XGpioPs_Config*GpioConfigPtr;
 static XGpio GPIOInstance_Ptr;

 int xStatus,start,end;
 u32 Readstatus1,Readstatus2;
 int iPinNumberld9 = 7; /*Ld9 is connected to MIO pin 7*/
 int iPinNumberbtn8 = 50;/*Btn8 is connected to MIO pin 50*/
 int iPinNumberbtn9 = 51;/*Btn9 is connected to MIO pin 51*/
 int iPinNumberBTNU = 54;/*BTNU is connected to EMIO pin 54*/
 init_platform();
 print("##### Application Starts #####

");

 print("
");

 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 //Step-1 :AXI GPIO Initialization

 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 #define XPAR_AXI_GPIO_0_DEVICE_ID 0//因为没有报错的错误,自己添加的define
 xStatus = XGpio_Initialize(&GPIOInstance_Ptr,XPAR_AXI_GPIO_0_DEVICE_ID);

 if(XST_SUCCESS != xStatus)

 print("GPIO INIT FAILED

");

 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 //Step-2 :AXI GPIO Set the Direction

 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 XGpio_SetDataDirection(&GPIOInstance_Ptr, 1, 1);//input

 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 //Step-3 :PS GPIO Intialization

 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 GpioConfigPtr = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID);

 if(GpioConfigPtr == NULL)

 return XST_FAILURE;

 xStatus = XGpioPs_CfgInitialize(&psGpioInstancePtr,

 GpioConfigPtr,

 GpioConfigPtr->BaseAddr);

 if(XST_SUCCESS != xStatus)

 print(" PS GPIO INIT FAILED 

");

 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 //Step-4 :PS GPIO pin setting to Output

 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 XGpioPs_SetDirectionPin(&psGpioInstancePtr, iPinNumberld9,1);

 XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, iPinNumberld9,1);

 XGpioPs_SetDirectionPin(&psGpioInstancePtr, iPinNumberbtn8,0);

 XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, iPinNumberbtn8,1);

 XGpioPs_SetDirectionPin(&psGpioInstancePtr, iPinNumberbtn9,0);

 XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, iPinNumberbtn9,1);

 XGpioPs_SetDirectionPin(&psGpioInstancePtr, iPinNumberBTNU,0);

 XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, iPinNumberBTNU,1);

 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 //Step-5 :OLED Intialization

 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 OLED_Init();

 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 //Step-6 :press btn8 to start Demo

 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 OLED_ShowString(0,0, "BTN8 to start");

 OLED_Refresh_Gram();



 while (1){

start=XGpioPs_ReadPin(&psGpioInstancePtr, iPinNumberbtn8);

if(start){

XGpioPs_WritePin(&psGpioInstancePtr,iPinNumberld9,1);

print("###################### Demo Starts ########################
");

OLED_ShowString(0,0, "DALE I LOVE U");

OLED_ShowString(0,16, "BTNR to go on");

OLED_Refresh_Gram();

break;

 }

end=XGpioPs_ReadPin(&psGpioInstancePtr, iPinNumberbtn9);

if(end){

XGpioPs_WritePin(&psGpioInstancePtr,iPinNumberld9,0);

OLED_Clear();

break;

 }

 }



 while(1){

 Readstatus1 = XGpio_DiscreteRead(&GPIOInstance_Ptr, 1) ;//读BTNR

 if(Readstatus1){

 OLED_ShowString(0,0, "DO U LOVE ME ?");

 OLED_ShowString(0,16, "BTNU to go on");

 OLED_Refresh_Gram();

 break;

 }

 }

 while(1){

 Readstatus2 = XGpioPs_ReadPin(&psGpioInstancePtr, iPinNumberBTNU) ;//读BTNU

 if(Readstatus2){

 OLED_Clear();

 OLED_ShowString(0,0, "HAHA BYE");

 OLED_ShowString(0,16, "BTN9 to end");

 OLED_Refresh_Gram();




 }

 end=XGpioPs_ReadPin(&psGpioInstancePtr, iPinNumberbtn9);

 if(end){

 XGpioPs_WritePin(&psGpioInstancePtr,iPinNumberld9,0);

 OLED_Clear();

 break;

 }




 }

 print("
");

 print("***********
");

 print("BYE 
");

 print("***********
");

 cleanup_platform();

 return 0;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

zedboard中OLED源代码

标签:

热心网友 时间:2022-04-08 05:22

由于我本机PC端测试使用的opencv的版本为opencv2.4.6.1.故而我想要移植这个版本的opencv到zedboard板卡上。参考Xilinx出版的《Zynq开发实战》的第13章以及几个人的博客进行配置编译的时候,总是会出现如下的错误:
In file included from /usr/include/math.h:409:0,
from /opt/opencv-2.4.6.1/moles/core/include/opencv2/core/types_c.h:94,
from /opt/opencv-2.4.6.1/moles/core/include/opencv2/core/core.hpp:49,
from /opt/opencv-2.4.6.1_forArm/moles/core/precomp.hpp:50:
/usr/include/bits/mathinline.h: In function 'void cv::randnScale_8u(const float*, uchar*, int, int, const float*, const float*, bool)':
/usr/include/bits/mathinline.h:675:3: error: unknown register name 'st' in 'asm'
/usr/include/bits/mathinline.h:675:3: error: unknown register name 'st' in 'asm'
/usr/include/bits/mathinline.h:675:3: error: unknown register name 'st' in 'asm'
/usr/include/bits/mathinline.h: In function 'void cv::randShuffle_(cv::Mat&, cv::RNG&, double) [with T = unsigned char]':
/usr/include/bits/mathinline.h:675:3: error: unknown register name 'st' in 'asm'
/usr/include/bits/mathinline.h: In function 'void cv::randShuffle_(cv::Mat&, cv:
......
在用交叉编译工具链编译opencv时候,我本来已经将交叉编译工具链写入了环境变量,那它搜索的时候,应该是遍历交叉编译工具链下的头文件,但是 opencv却默认遍历到gcc头文件下,故而出现这样的错误,为何会这样呢?试了多种方式均不能编译通过,故而弃用书上编译opencv的方式,转向下 面的方式:
我们采用图形化的cmake进行配置,这样就可以指定交叉编译工具链的头文件目录,下载cmake安装包(ps:不要下载源代码),下载地址如下:
http://www.cmake.org/cmake/resources/software.html我使用的系统为32位Centos6.4,故而我选择的平台为Linux i386,下载其后面的压缩包。
下载完成后,解压缩cmake-2.8.12.2-Linux-i386.tar.gz到/usr/local下,使用下面的命令:
tar xvzf cmake-2.8.12.2-Linux-i386.tar.gz -C /usr/local
export PATH=$PATH:/usr/local/cmake-2.8.12.2-Linux-i386/bin
接下来,我们利用cmake-gui进行opencv的配置,创建zedopencv目录,解压缩opencv代码到此目录下,在opencv的源代码下创建zed_install,然后进入此目录。命令如下:
tar xvzf opencv-2.4.6.1.tar.gz -C ./zedopencv
cd ./zedopencv/opencv-2.4.6.1
mkdir zed_install
cd zed_install
cmake-gui
出现如下的界面:

其中,按照提示选择要编译的opencv源代码的路径以及安装编译路径,这里如图所示。然后点击Configure,出现如下的配置界面:

这里一定要注意,选择Unix Makefile选项,在下面选择指定编译器选项,然后点击next进入下面的界面,按照提示,填入如下的信息:

指定交叉编译环境的头文件目录是/opt/xlinx-arm-gcc/arm-xilinx-linux-gnueabi/libc/usr/,选择C 与C++的编译器,还有平台,这里一定要注意Library mode的选项,这里一定要选择在根目录与本地系统下均搜索,如上图所示,点击Finish完成配置。第三方库,尽量不用选,如下图所示:

然后点击Generate,完成配置,然后执行make,开始编译,编译的过程中会出现下面的一个错误:
Linking CXX executable ../../bin/opencv_createsamples
../../lib/libcxcore.so: undefined reference to `clock_gettime'
../../lib/libcxcore.so: undefined reference to `pthread_key_create'
../../lib/libcxcore.so: undefined reference to `pthread_getspecific'
../../lib/libcxcore.so: undefined reference to `pthread_setspecific'
按照错误的提示,是缺少线程链接,我们需要对此目录下的CmakeCache.txt进行修改,修改的位置如下:
178 //Flags used by the linker.
179 CMAKE_EXE_LINKER_FLAGS:STRING=-lpthread -lrt
然后保存退出,继续编译就可以完成所有的编译。完成后,在此目录下的lib下发现已经编译好了所有的库文件,创建zed-lib-opencv文件夹,拷贝所用的.so文件到此目录下。
为了便于制作镜像文件,在此目录下创建ramdisk文件夹。我写了个shell脚本,也就是图中所示的fs.sh,为了便于操作其中的参数$1代表要制作的镜像的名称,$2代表要制作镜像的文件夹,$3代表镜像的大小,脚本的具体内容如下:
#!/bin/bash
dd if=/dev/zero of=$1.image bs=1M count=$3

mke2fs -F $1.image -L "ramdisk" -b 1024 -m 0
tune2fs $1.image -i 0

chmod 777 $1.image

#mkdir ramdisk

mount -o loop $1.image ./ramdisk

cp -R ./$2/* ./ramdisk

umount ./ramdisk
由于ramdisk文件系统的大小为8M,而Opencv的库文件显然大于8M,其接近于25M,故而8M是满足不了的,SD卡有4G的空间,制作库文件的镜像,拷贝到SD卡上,把SD卡挂载到Linux系统,就可以解决空间不够用的问题。我们进行如下的操作:
首先进入filesys,在usr目录下创建lib,再进入etc/init.d,对rcS文件进行修改。添加下面几行代码:
echo "mount otherlib....."
mount /dev/mmcblk0p1 /mnt
mount /mnt/opencvlib.image /usr/lib

export PATH=$PATH:/usr/local/bin
export LD_LIBRARY_PATH=/usr/local/lib:/lib
然后,我们进行镜像的制作:
./fs.sh ramdisk8M filesys 8
./fs.sh opecv_lib zed-lib-opencv 80
制作了两个镜像文件ramdisk8M.image opecv_lib.image大小分别为8M与80M.
然后对ramdisk进行压缩:
gzip -9 ramdisk8M.image
然后将新生成的ramdisk8M.image.gz与opencv_lib.image拷 贝到SD卡启动zedboard即可发现,/usr/lib目录下已经有了opencv库文件,至此opencv移植到zedboard工作彻底完成!此 方法也可以用于一般的arm开发板opencv的移植。
要支持第三方库,可以参照这个博客:ffmpeg支持,在编译完第三方库之后,需要重新编译opencv库!
opencv不用把库放到开发板上吗

要支持第三方库,可以参照这个博客:ffmpeg支持,在编译完第三方库之后,需要重新编译opencv库!

怎么在linux上编译利用opencv的库 在arm开发板上运行

eclipse编译的arm文件? 1 eclipse编译用的是pc上的编译器还是交叉编译器? 2 arm文件是什么文件?c文件无所谓arm还是i386的 要在板子上运行,首先你要用cross compiler,然后才是把编译好的执行文件和库在板子上跑起来

Linux ubuntu下 qt5.15.12环境下配置opencv4.5.5

在Linux Ubuntu系统中,若想在qt5.15.12环境中配置opencv4.5.5,首先需要从opencv.org/releases/下载对应版本的源码,并将其复制到开发板的root权限目录。接着,解压缩文件并创建build和install文件夹。安装必要的依赖库,如cmake-gui、build-essential等,确保cmake和qt相关工具已安装。进入build文件夹...

ESP32-CAM与OpenCV结合:打造智能图传与图像识别系统

在结合ESP32-CAM与OpenCV之前,需要先将ESP32-CAM烧录到开发板中。目前,常用的烧录工具包括Arduino IDE、ESP-IDF等。开发者需要根据自己的开发板类型和需求,选择合适的烧录工具,并按照相应的烧录教程进行操作。在烧录过程中,需要注意的是,必须确保开发板与计算机的连接稳定,以避免烧录失败。3、图传模...

tk1怎么让opencv使用gpu解码

Jetson TK1开发套件以其低功耗、高性能的特点已迅速成为移动式和嵌入式并行计算必备的开发平台。教你如何使用CUDA和OpenCV库来,在你的Jetson TK1开发板上进行机器视觉应用的开发。

在ARM上运行交叉编译后的opencv文件,没有输出

opencv编译不通过,出现skip之类的,说明ffmpeg没编译好,或者其编译好了,但是pkg-config没有设置好,一定要设置好其环境 前边几步不通过的话,看看命令有没有少,或者有没有修改好makefile 在arm上使用时,一种方法时直接将编译好的opencv目录下的lib文件拷贝到开发板对应的/lib目录下,其他或者拷贝到...

(未完)ubuntu20.04 qt6.2.4 aarch64 开发编译环境配置

添加设备,可以在局域网中找到设备。打开设置,然后add一个Device 需要填写IP,端口,user name, 如果没有key,就生成一个key file,然后链接,期间需要输入username对应的密码。出现下面窗口就是配置好了。详细可以看这个链接 7. 远程连接 - [野火]嵌入式Qt应用开发实战指南-基于LubanCat-RK开发板 文档...

如何在Jetson TK1上安装Caffe深度学习库

sudo shutdown -r now 一旦开发板重启后,可以登录进去,然后继续安装Caffe所需的环境:ssh ubuntu@tegra-ubuntu.local sudo add-apt-repository universe sudo apt-get update sudo apt-get install libprotobuf-dev protobuf-compiler gfortran \ libboost-dev cmake libleveldb-dev libsnappy-dev \ ...

opencv2.4 如何能够同时打开多个usb摄像头,两个摄像头都是摄像头是微 ...

可以通过OpenCV的capture类函数或者结合DirectShow来实现双摄像头的捕获,具体可见我的读书笔记《OpenCV学习笔记(6)基于 VC+OpenCV+DirectShow 的多个摄像头同步工作 》。文中曾提及不能用cvCreateCameraCapture 同时读取两个摄像头,不过后来一位研友来信讨论说只要把摄像头指针的创建代码按照摄像头序号降序...

初学者想学ARM嵌入式,应该选ARM9还是ARM11开发板?

对于ARM嵌入式的初学者,建议用ARM9开发板。首先,从功能上来说,ARM11要比ARM9强一些,但是性能优异并不代表适合初学者。对于初学者来说ARM11的有些功能是冗余。其次,学习ARM9或者ARM11就在所难免学习其所支持的操作系统Linux(ARM11可以支持Android)。目前,市面上ARM9的开发版的价格要比ARM11低...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
如何通过网线连接路由器实现两台电脑都能上网 哪位仁兄给我讲一下路由器的作用还有有线路由器和无线路由器的区别通... 家里有个路由器但不是自己安装的,没密码怎么办,没电脑只有手机 我的是水星mw300R无线路由器一台连接台式电脑,还有一台手机上wf。最近... 长虹电视童锁在那个位置? 南宁那几所高职专科院校比较好 广西南宁有什么好的专科学校? 南宁公办专科学校有哪些? 联通营业厅卖的iPhone4裸机就必须要用联通号? 本人打算入手一部iphone4,但是用的是移动的号﹑怎么办?如果买那个移动... 家里来客人了,你怎么做自我介绍 信用卡账户属不属于二类户?他们的区别是什么? 你们信用卡属于一类卡吗? 52.4纳秒等于多少秒 信用卡是几类卡? verilog中怎样将纳秒转化成毫秒 164133分钟,是多长时间 孕妇早餐喝玉米汁配什么好处 1纳秒等于多少分钟??? python中如何将纳秒时间戳转换成秒? 20纳秒是多少秒用科学记数法表示? 20纳秒等于多少秒用科学计数法表示 男朋友好几天没有联系我了,我要不要主动联系他呢? 男友两天没联系我,啥意识他? 我男朋友生气了说冷静几天吧 然后两天没联系我了 我要主动找他还是等他找我 他还会找我吗? 男友两天不联系我,我要主动早他么? 我跟男友说我冷静两天,第三天他没主动理我,那我要主动吗? 男朋友已经两天没有联系我了,我要主动找他一下吗? 男朋友两天没跟我联系,我应该主动联系他吗 我和男友冷战两天没联系了,我要不要主动联系他?还是等他联系我? 我的世界1.7.2怎么复印粘贴 如果你发现有同学在墙上乱涂乱画你会怎么建议学校怎么做啊! 如何将我的世界皮肤转为纸模型图纸? 帮何春分设计一个个性签名,满意追加。 自己画的我的世界纸模图纸,用手机拍照,然后传到彩色打印机,可以打 我的世界用书和笔写完一本成书后,有办法多复制几本吗? 我的世界怎么吧地图上的画面转到展示框 我的世界心殇汉化即时建造要怎样用 我的世界村民繁殖问题 监控帐号被锁定怎么办 监控系统输入密码后,总显示账号被锁定咋办好办法快捷点 监控器的账户被锁定该怎么办啊 大华摄像头显示账号被锁定为什么 四川大学大红门是哪个门 内涵和内容 特点和特征有什么区别和共同点 北京大红门属于哪个区 简述信息检索中内容特征的含义是什么 文献内容特征有哪些 大红门以前叫什么这么叫 文章中语言特点和内容特点有什么区别
  • 焦点

最新推荐

猜你喜欢

热门推荐