文档章节

在pcDuino上安装OpenCV,以及两个OpenCV入门的例子

pc朵拉
 pc朵拉
发布于 2013/07/03 21:37
字数 604
阅读 1466
收藏 4

OpenCV是一个很基于 Python的开源视觉识别工具。 在这里,我们相信地介绍了如何如何在pcDuino上安装OpenCV。 然后给出了两个例子。 第一个例子是介绍如何用OpenCV抓图像,第二个例子介绍如何用OpenCV进行人脸识别。

安装步骤:

$ sudo apt-get -y install build-essential cmake cmake-qt-gui pkg-config libpng12-0 libpng12-dev libpng++-dev libpng3 libpnglite-dev zlib1g-dbg zlib1g zlib1g-dev pngtools libtiff4-dev libtiff4 libtiffxx0c2 libtiff-tools

$sudo apt-get -y install libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs ffmpeg libavcodec-dev libavcodec53 libavformat53 libavformat-dev libgstreamer0.10-0-dbg libgstreamer0.10-0 libgstreamer0.10-dev libxine1-ffmpeg libxine-dev libxine1-bin libunicap2 libunicap2-dev libdc1394-22-dev libdc1394-22 libdc1394-utils swig libv4l-0 libv4l-dev python-numpy libpython2.6 python2.6-dev libgtk2.0-dev pkg-config

$sudo apt-get install libopencv-dev python-opencv

$sudo apt-get install python-dev

$sudo ln -s /usr/lib/arm-linux-gnueabihf/libjpeg.so /usr/lib
$sudo ln -s /usr/lib/arm-linux-gnueabihf/libfreetype.so /usr/lib
$sudo ln -s /usr/lib/arm-linux-gnueabihf/libz.so /usr/lib 

$sudo easy_install PIL
$sudo pip install -v PIL

例子一:如何用OpenCV抓图像

#!/Users/brent/.virtualenvs/lumber/bin/python

import cv

cv.NamedWindow("w1", cv.CV_WINDOW_AUTOSIZE)
camera_index = 0
capture = cv.CaptureFromCAM(camera_index)

gx = gy = 1
grayscale = blur = canny = False

def repeat():
    global capture #declare as globals since we are assigning to them now
    global camera_index
    global gx, gy, grayscale, canny, blur
    frame = cv.QueryFrame(capture)
    # import pdb; pdb.set_trace()

    if grayscale:
        gray = cv.CreateImage(cv.GetSize(frame), frame.depth, 1)
        cv.CvtColor(frame, gray, cv.CV_RGB2GRAY)
        frame = gray

    if blur:
        g = cv.CreateImage(cv.GetSize(frame), cv.IPL_DEPTH_8U, frame.channels)
        cv.Smooth(frame, g, cv.CV_GAUSSIAN, gx, gy)
        frame = g

    if grayscale and canny:
        c = cv.CreateImage(cv.GetSize(frame), frame.depth, frame.channels)
        cv.Canny(frame, c, 10, 100, 3)
        frame = c
    cv.ShowImage("w1", frame)

    c = cv.WaitKey(10)
    if c==ord('='): #in "n" key is pressed while the popup window is in focus
        gx += 2
        gy += 2
    elif c == ord('-'):
        gx = max(1, gx-2)
        gy = max(1, gy-2)
    elif c == ord('x'):
        gx += 2
    elif c == ord('X'):
        gx = max(1, gx-2)
    elif c == ord('q'):
        exit(0)

    elif c == ord('b'):
        blur = not blur
    elif c == ord('g'):
        grayscale = not grayscale
    elif c == ord('c'):
        canny = not canny

while True:
    repeat()

例子二:人脸识别

输入图像:

opencv_in

下载上面的图片,保存为 “opencv_in.jpg”.

输出图像:

out

#!/usr/bin/env python
#coding=utf-8
import os
from PIL import Image, ImageDraw
import cv

def detect_object(image):
    grayscale = cv.CreateImage((image.width, image.height), 8, 1)
    cv.CvtColor(image, grayscale, cv.CV_BGR2GRAY)

    cascade = cv.Load("/usr/share/opencv/haarcascades/haarcascade_frontalface_alt_tree.xml")
    rect = cv.HaarDetectObjects(grayscale, cascade, cv.CreateMemStorage(), 1.1, 2,
        cv.CV_HAAR_DO_CANNY_PRUNING, (20,20))

    result = []
    for r in rect:
        result.append((r[0][0], r[0][1], r[0][0]+r[0][2], r[0][1]+r[0][3]))

    return result

def process(infile):
    image = cv.LoadImage(infile);
    if image:
        faces = detect_object(image)

    im = Image.open(infile)
    path = os.path.abspath(infile)
    save_path = os.path.splitext(path)[0]+"_face"
    try:
        os.mkdir(save_path)
    except:
        pass
    if faces:
        draw = ImageDraw.Draw(im)
        count = 0
        for f in faces:
            count += 1
            draw.rectangle(f, outline=(255, 0, 0))
            a = im.crop(f)
            file_name = os.path.join(save_path,str(count)+".jpg")
     #       print file_name
            a.save(file_name)

        drow_save_path = os.path.join(save_path,"out.jpg")
        im.save(drow_save_path, "JPEG", quality=80)
    else:
        print "Error: cannot detect faces on %s" % infile

if __name__ == "__main__":
    process("./opencv_in.jpg")

保存上面的代码为  test_face.py.

运行 $python test_face.py 来运行。

© 著作权归作者所有

pc朵拉

pc朵拉

粉丝 63
博文 87
码字总数 35246
作品 1
武汉
私信 提问
加载中

评论(1)

A
AKAE
在配置环境输出这句命令时:
sudo apt-get -y install libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs ffmpeg libavcodec-dev libavcodec53 libavformat53 libavformat-dev libgstreamer0.10-0-dbg libgstreamer0.10-0 libgstreamer0.10-dev libxine1-ffmpeg libxine-dev libxine1-bin libunicap2 libunicap2-dev libdc1394-22-dev libdc1394-22 libdc1394-utils swig libv4l-0 libv4l-dev python-numpy libpython2.6 python2.6-dev libgtk2.0-dev pkg-config
出现如下错误:
E: Unable to locate package libpython2.6
E: Couldn't find any package by regex 'libpython2.6'
E: Unable to locate package python2.6-dev
E: Couldn't find any package by regex 'python2.6-dev'
我的Python版本是2.7.8,请问该如何解决?
pcDuino书籍_第五章: pcDuino上面安装和测试SimpleCV以及OpenCV

上篇: pcDuino 书籍_第四章:pcDuino上用Python编程简介 pcDuino有计算能力来进行计算机视觉,这就让很多在Arduino 上不可能的项目可以在pcDuino上实现。 我们可以把计算机视觉这一非常强大的...

pc朵拉
2013/08/05
1K
0
pcDuino+OpenCV实现人脸追踪摄像头

OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLA...

酸酸苹果汁
2014/01/03
7.5K
3
【转】用pcDuino做猫脸识别

- 猫脸识别 – Kick off 今天确定了新代一目标: 能够在开发板上收到视频信号,并自动识别其中的物体(第一步不一定是猫脸) 关于猫脸识别 Open CV可以做到对任意形状的识别(Haar-like fea...

微微的薄雾
2013/07/12
5.4K
5
基于pcduino上开发视频监控能实现吗?

我们几个学生想基于pcduino上开发一个智能监控玩玩 硬件是 摄像头+舵机 实现功能:移动侦测与动态跟踪功能,当摄像头侦测到移动对象能进行跟踪拍摄。 求教:开源项目基于Opencv与QT开发的软件...

KK同学
2014/08/14
607
0
在pcDuino上学习OpenCV系列教程(四)播放avi文件

使用OpenCV播放视频,几乎与使用它来显示图像一样容易。播放视频时只需要处理的新问题就是如何循环地顺序读取视频中的每一帧,以及如何从枯燥的电影视频的读取中退出该循环操作。 说明: 硬件...

雨后的彩虹桥
2014/03/08
430
0

没有更多内容

加载失败,请刷新页面

加载更多

for循环

九九乘法表 示例:for(int i = 1; i <= 9; i++){ for (int j = 1; j <= i; j++) { // 每次开始i循环,j都会重新定义为j=1,然后开始循环计算 System.out.print(j +......

Shutting
12分钟前
3
0
小王子1

一定要帅! 韩国设计师品牌 insgram全世界得网红 韩国潮男穿搭 HM 找到穿衣服最好看的人,跟他比,比他好看。 在兴趣前,不要表现目的性,压力 关系是不热就冷的! 不喜欢压力,不喜欢负责任...

阿锋zxf
30分钟前
8
0
时间戳

1 loadTimeString(ts) { var d = new Date(); if (String(ts).length == 10) { d = new Date(ts * 1000); ......

东方巨人
32分钟前
4
0
Redis Cluster

Redis Cluster 集群 redis集群有以下几种方式 普通一主多从 普通一主多从+哨兵 cluster分片模式 一主多从 搭建方式网上很多,就不多描述了。 这种集群方式,一般master用作写,slave用做读,...

lazy~
32分钟前
8
0
 介绍一款优秀的通用管理权限快速开发框架

这是一套以权限管理为主的轻量化快速开发框架,配置有流程、专业表单、权限、app、企业微信等基础功能模块,在开发通用软件的效率上很有优势。 软件平台常用研发需求分析 《那些年我们一起做...

我想造火箭
48分钟前
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部