打印
[Beagle Bone]

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

[复制链接]
12100|34
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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
sudo apt-get install xorg lxde-core
安装完全版:sudo apt-get install xorg lxde

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

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

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



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

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

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
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的源代码位于上一层目录

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

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


编译完成后
sudo make install

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

【webcam.cpp】
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

int main(int argc,char **argv)
{
/* init camera */
  CvCapture* pCapture = cvCreateCameraCapture(0);
  cvSetCaptureProperty(pCapture, CV_CAP_PROP_FRAME_WIDTH, 800);
  cvSetCaptureProperty(pCapture, CV_CAP_PROP_FRAME_HEIGHT, 480);

  IplImage *pFrame = 0;

  if(NULL == pCapture)
  {
    fprintf(stderr,"Can't initialize webcam!\n");
    return 1;
  }

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

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

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

  cvReleaseCapture(&pCapture); // free memory

  return 0;
}
【makefile】

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

sudo make
生成可执行程序webcam


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


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


导出的图片

源码
webcam.rar (64.41 KB)

相关帖子

沙发
zhangmangui| | 2015-3-1 22:45 | 只看该作者
再搞个识别  

使用特权

评论回复
板凳
我爱你的吻123| | 2015-3-12 10:28 | 只看该作者
搞的非常好,写的也很详细。有时间多发点这个上来啊。:)

使用特权

评论回复
地板
xjjspace| | 2015-3-16 11:30 | 只看该作者
我的天,这简直是手把手教啊,非常感谢分享!

使用特权

评论回复
5
icecut| | 2015-3-20 12:10 | 只看该作者
恩.不错.下一步就是识别和运动了.

使用特权

评论回复
6
mcuzone| | 2015-4-1 10:45 | 只看该作者
opencv,未完待续,坐等更新。倒想看看AM335x运行opencv的效率如何

使用特权

评论回复
7
哈利| | 2015-5-7 13:25 | 只看该作者
哇塞!

使用特权

评论回复
8
yhy123456| | 2015-5-7 21:59 | 只看该作者
厉害  ,赞一个  !

使用特权

评论回复
9
哈利| | 2015-5-9 09:10 | 只看该作者
我想问一下楼主,我用SD卡给Emmc里面下载了系统之后,SD卡怎么格式化啊..我还想用呢.

使用特权

评论回复
10
fjjjnk1234|  楼主 | 2015-5-9 09:53 | 只看该作者
哈利 发表于 2015-5-9 09:10
我想问一下楼主,我用SD卡给Emmc里面下载了系统之后,SD卡怎么格式化啊..我还想用呢. ...

下载SDFormatter,格式化就行

使用特权

评论回复
11
哈利| | 2015-5-9 11:39 | 只看该作者
fjjjnk1234 发表于 2015-5-9 09:53
下载SDFormatter,格式化就行

恩恩,已经格式化好了.还有一个问题:
我的系统在eMMC里面,我可不可以把格式化后的SD卡挂载到文件系统上?这样的话,系统在eMMC里面,启动的快一些.SD卡呢就可以扩展存储空间.

使用特权

评论回复
12
fjjjnk1234|  楼主 | 2015-5-9 11:56 | 只看该作者
哈利 发表于 2015-5-9 11:39
恩恩,已经格式化好了.还有一个问题:
我的系统在eMMC里面,我可不可以把格式化后的SD卡挂载到文件系统上?这 ...

好像还需要其它设置,插入SD卡,默认从SD卡启动,你可以试试插入SD卡看能从EMMC启动吗?或者从EMMC中启动系统后,插入SD卡,看能挂载吗?

使用特权

评论回复
13
哈利| | 2015-5-9 13:03 | 只看该作者
因为我之前已经把SD卡格式化了,插上SD卡后仍然会在EMMC启动。EMMC启动之后,会识别出SD卡,但不会自动挂载。在SSH里面可以手动挂载,但重启之后就得重新来一遍。这样的话,是不是意味着可以将OPENCV装在SD卡里面了,只不过用之前得手动挂载一下。。。有没有什么办法,让它开机就挂载呢?

使用特权

评论回复
14
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

使用特权

评论回复
15
哈利| | 2015-5-9 17:53 | 只看该作者
fjjjnk1234 发表于 2015-5-9 14:43
修改/etc/fstab 文件,看这http://my.oschina.net/wukongcelebrity/blog/377363

十分感谢!我马上试一试。
对了,LXDE安装好之后,使用startx打开吗?如果不打开,X11VNC连不上。楼主是怎么做到的呢?

使用特权

评论回复
16
fjjjnk1234|  楼主 | 2015-5-9 18:03 | 只看该作者
哈利 发表于 2015-5-9 17:53
十分感谢!我马上试一试。
对了,LXDE安装好之后,使用startx打开吗?如果不打开,X11VNC连不上。楼主是怎 ...

安装tightvncserver后在windows中用TightVNC Viewer登陆就可以了,不需要startx

使用特权

评论回复
17
ecoren| | 2015-5-13 08:53 | 只看该作者
搞赢家的凑个热闹,

使用特权

评论回复
18
lydiary| | 2015-6-7 09:06 | 只看该作者
请问isight这个摄像头连上usb就能用吗?

使用特权

评论回复
19
fjjjnk1234|  楼主 | 2015-6-7 09:17 | 只看该作者
lydiary 发表于 2015-6-7 09:06
请问isight这个摄像头连上usb就能用吗?

是的,Linux中已经带有UVC设备驱动了

使用特权

评论回复
20
lydiary| | 2015-6-7 09:43 | 只看该作者
fjjjnk1234 发表于 2015-6-7 09:17
是的,Linux中已经带有UVC设备驱动了

哦哦,那我应该换一个摄像头,昨天用的其他的usb摄像头打不开,不知道为什么

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

46

主题

524

帖子

7

粉丝