[Beagle Bone] 【Beagle Bone开源设计】基于OpenCV的简单摄像头拍照功能

[复制链接]
 楼主| fjjjnk1234 发表于 2015-2-22 00:53 | 显示全部楼层 |阅读模式
本帖最后由 fjjjnk1234 于 2015-2-23 17:21 编辑

摄像头用的是iSight摄像头

本来打算用官方的Debian系统摄像头结合小车做的,结果买的USB集线器居然在官方的Debian系统中用不了,貌似没驱动。最终决定用Ubuntu,先做摄像头部分,在官方的Debian中也大同小异,我这由于USB集线器用不了,BB Black上又只有一个USB口,没法同时使用摄像头和无线网卡,接下去的几天时间里再用Debian做小车控制部分。Ubuntu下载地址:http://www.armhf.com/download/,安装也很简单,看这篇官方手册:http://www.armhf.com/boards/beaglebone-black/bbb-sd-install/
安装完Ubuntu后,本身是不带有桌面的,可以选择安装LXDE
先更新软件源

安装LXDE可以选择安装core或完全版,我安装了core
  1. sudo apt-get install xorg lxde-core
安装完全版:sudo apt-get install xorg lxde

安装时间挺长的,建议在sudo apt-get install xorg lxde-core
之前先安装screen,一个虚拟终端管理器,用它在后台管理终端界面,这样在安装LXDE或做其它耗时间比较长的工作的时候就不怕SSH断开后,正在进行的操作中断了。
安装:
  1. sudo apt-get install screen
使用方法:
创建虚拟终端:
  1. screen –S terminal1
这样就创建好了一个名为terminal1的终端了,接着可以放心做其它耗时间的工作了。
按ctrl+a后再按d就能保存好一个虚拟终端了。这时,断开SSH也可以了。

访问已经创建好的虚拟终端
screen –ls可以列出已经创建的正在后台运行的终端

screen –r terminal1能进入终端
进入终端后执行exit就能完全退出虚拟终端。



【安装opencv】
更新软件源
  1. sudo apt-get update
安装相关依赖项,部分依赖项在系统中已经默认安装了,建议都尝试安装下,避免漏掉

  1. sudo apt-get install build-essential
  2. sudo apt-get install cmake
  3. sudo apt-get install libgtk2.0-dev
  4. sudo apt-get install pkg-config
  5. sudo apt-get install python-dev python-numpy
  6. sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev
建立opencv文件夹
sudo mkdir opencv
获取opencv源代码

  1. sudo wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.10/opencv-2.4.10.zip/download

下载下来的文件名为download,改名为opencv-2.4.10.zip
  1. sudo mv download opencv-2.4.10.zip
解压,获得一个名为opencv-2.4.10的文件夹
先apt-get install zip
sudo unzip opencv-2.4.10

进入opencv源代码目录,在该目录中新建一个名为release的文件夹
在release文件夹中,使用cmake工具在该文件夹中生成makefile文件,指定opencv的安装目录为/usr/local,opencv的源代码位于上一层目录

  1. sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

编译源代码
在make之前,先创建虚拟终端,防止SSH断开后,正在进行的操作中断
screen -S terminal1
sudo make
时间比较长,大概5个小时左右


编译完成后
  1. sudo make install

更新搜索动态链接库
  1. sudo ldconfig
接着,写一个简单的程序通过OpenCV控制摄像头拍照

【webcam.cpp】
  1. #include <opencv2/core/core.hpp>
  2. #include <opencv2/imgproc/imgproc.hpp>
  3. #include <opencv2/highgui/highgui.hpp>
  4. #include <iostream>
  5. #include <stdio.h>
  6. #include <stdlib.h>

  7. int main(int argc,char **argv)
  8. {
  9. /* init camera */
  10.   CvCapture* pCapture = cvCreateCameraCapture(0);
  11.   cvSetCaptureProperty(pCapture, CV_CAP_PROP_FRAME_WIDTH, 800);
  12.   cvSetCaptureProperty(pCapture, CV_CAP_PROP_FRAME_HEIGHT, 480);

  13.   IplImage *pFrame = 0;

  14.   if(NULL == pCapture)
  15.   {
  16.     fprintf(stderr,"Can't initialize webcam!\n");
  17.     return 1;
  18.   }

  19.   pFrame = cvQueryFrame(pCapture); // query a frame

  20.   if(NULL == pFrame)
  21.   {
  22.     fprintf(stderr,"Can't get a frame!\n");
  23.     return 1;
  24.   }

  25.   const char *pImageFileName ="webcam.jpg";
  26.   cvSaveImage(pImageFileName, pFrame);

  27.   cvReleaseCapture(&pCapture); // free memory

  28.   return 0;
  29. }
【makefile】

  1. INCLUDE = $(shell pkg-config --cflags opencv)
  2. LIBS = $(shell pkg-config --libs opencv)
  3. SOURCES = webcam.cpp
  4. # 目标文件
  5. OBJECTS = $(SOURCES:.cpp=.o)
  6. # 可执行文件
  7. TARGET = webcam
  8. $(TARGET):$(OBJECTS)
  9.         g++ -o $(TARGET) $(OBJECTS) -I $(INCLUDE) $(LIBS)
  10. $(OBJECTS):$(SOURCES)
  11.         g++ -c $(SOURCES)
  12. clean:
  13.         rm $(OBJECTS) $(TARGET)
  14. # 编译规则 $@代表目标文件 [        DISCUZ_CODE_272        ]lt; 代表第一个依赖文件
  15. %.o:%.cpp
  16.         g++ -I $(INCLUDE) -o $[url=home.php?mod=space&uid=72445]@[/url] -c [        DISCUZ_CODE_272        ]lt;
在PC机中用VNC登陆
在终端中

  1. sudo make
生成可执行程序webcam


执行可执行程序,就能看到在相同目录下生成webcam.jpg图片
  1. sudo ./webcam


执行webcam后出现HIGHGUI ERROR:V4L/V4L2:VIDIOC_S_CROP
这个暂时不知道什么原因
这个摄像头照出来的效果感觉还行,设置成800X480的分辨率


导出的图片

源码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
zhangmangui 发表于 2015-3-1 22:45 | 显示全部楼层
再搞个识别  
我爱你的吻123 发表于 2015-3-12 10:28 | 显示全部楼层
搞的非常好,写的也很详细。有时间多发点这个上来啊。:)
xjjspace 发表于 2015-3-16 11:30 | 显示全部楼层
我的天,这简直是手把手教啊,非常感谢分享!
icecut 发表于 2015-3-20 12:10 | 显示全部楼层
恩.不错.下一步就是识别和运动了.
mcuzone 发表于 2015-4-1 10:45 | 显示全部楼层
opencv,未完待续,坐等更新。倒想看看AM335x运行opencv的效率如何
哈利 发表于 2015-5-7 13:25 | 显示全部楼层
哇塞!
yhy123456 发表于 2015-5-7 21:59 | 显示全部楼层
厉害  ,赞一个  !
哈利 发表于 2015-5-9 09:10 | 显示全部楼层
我想问一下楼主,我用SD卡给Emmc里面下载了系统之后,SD卡怎么格式化啊..我还想用呢.
 楼主| fjjjnk1234 发表于 2015-5-9 09:53 | 显示全部楼层
哈利 发表于 2015-5-9 09:10
我想问一下楼主,我用SD卡给Emmc里面下载了系统之后,SD卡怎么格式化啊..我还想用呢. ...

下载SDFormatter,格式化就行
哈利 发表于 2015-5-9 11:39 | 显示全部楼层
fjjjnk1234 发表于 2015-5-9 09:53
下载SDFormatter,格式化就行

恩恩,已经格式化好了.还有一个问题:
我的系统在eMMC里面,我可不可以把格式化后的SD卡挂载到文件系统上?这样的话,系统在eMMC里面,启动的快一些.SD卡呢就可以扩展存储空间.
 楼主| fjjjnk1234 发表于 2015-5-9 11:56 | 显示全部楼层
哈利 发表于 2015-5-9 11:39
恩恩,已经格式化好了.还有一个问题:
我的系统在eMMC里面,我可不可以把格式化后的SD卡挂载到文件系统上?这 ...

好像还需要其它设置,插入SD卡,默认从SD卡启动,你可以试试插入SD卡看能从EMMC启动吗?或者从EMMC中启动系统后,插入SD卡,看能挂载吗?
哈利 发表于 2015-5-9 13:03 | 显示全部楼层
因为我之前已经把SD卡格式化了,插上SD卡后仍然会在EMMC启动。EMMC启动之后,会识别出SD卡,但不会自动挂载。在SSH里面可以手动挂载,但重启之后就得重新来一遍。这样的话,是不是意味着可以将OPENCV装在SD卡里面了,只不过用之前得手动挂载一下。。。有没有什么办法,让它开机就挂载呢?
 楼主| fjjjnk1234 发表于 2015-5-9 14:43 | 显示全部楼层
哈利 发表于 2015-5-9 13:03
因为我之前已经把SD卡格式化了,插上SD卡后仍然会在EMMC启动。EMMC启动之后,会识别出SD卡,但不会自动挂载 ...

修改/etc/fstab 文件,看这http://my.oschina.net/wukongcelebrity/blog/377363
哈利 发表于 2015-5-9 17:53 | 显示全部楼层
fjjjnk1234 发表于 2015-5-9 14:43
修改/etc/fstab 文件,看这http://my.oschina.net/wukongcelebrity/blog/377363

十分感谢!我马上试一试。
对了,LXDE安装好之后,使用startx打开吗?如果不打开,X11VNC连不上。楼主是怎么做到的呢?
 楼主| fjjjnk1234 发表于 2015-5-9 18:03 | 显示全部楼层
哈利 发表于 2015-5-9 17:53
十分感谢!我马上试一试。
对了,LXDE安装好之后,使用startx打开吗?如果不打开,X11VNC连不上。楼主是怎 ...

安装tightvncserver后在windows中用TightVNC Viewer登陆就可以了,不需要startx
ecoren 发表于 2015-5-13 08:53 | 显示全部楼层
搞赢家的凑个热闹,
lydiary 发表于 2015-6-7 09:06 | 显示全部楼层
请问isight这个摄像头连上usb就能用吗?
 楼主| fjjjnk1234 发表于 2015-6-7 09:17 | 显示全部楼层
lydiary 发表于 2015-6-7 09:06
请问isight这个摄像头连上usb就能用吗?

是的,Linux中已经带有UVC设备驱动了
lydiary 发表于 2015-6-7 09:43 | 显示全部楼层
fjjjnk1234 发表于 2015-6-7 09:17
是的,Linux中已经带有UVC设备驱动了

哦哦,那我应该换一个摄像头,昨天用的其他的usb摄像头打不开,不知道为什么
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:相由心生,境随心转,一切法从心想生。

46

主题

524

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部