返回介绍

C 语言实验室 2:OpenCV

发布于 2024-10-10 23:21:32 字数 3046 浏览 0 评论 0 收藏 0

本实验会给你一份说明书,它描述了一个程序,你需要运用你在前几章中学到的知识构建这个程序。

这个项目比你之前见识到的项目都要大,所以动手之前请阅读完全部内容,并给自己一点时间。不要担心会被难倒,这里没有新概念,你也可以接着往后读,回过头再来做这个实验。

该去完成任务了,我们不会提供任何代码或答案。

说明书:入侵者检测器

试想一下,当你出门在外,如果你的计算机能帮你看家,还能让你看到小偷的真面目,该是多么神奇的一件事!这不是在做梦,只要计算机有网络摄像头,加上 OpenCV 的神奇力量就能做到!

你将创建:

入侵者检测器

计算机会用网络摄像头持续监测周围环境,当检测到有物体在移动时就会把当前捕捉到的图像保存为文件。如果把这个文件保存在网络驱动器上,或使用 Dropbox 那样的文件同步服务,就能抓他个“正着”。

OpenCV

OpenCV 是一款开源计算机视觉库,可以用它获取摄像头的输入、处理图像、分析实时图像数据,并根据计算机看到的东西判断有没有小偷。最重要的是,这一切都可以通过 C 代码来实现。

你可以在 Windows、Linux 和 Mac 平台上使用 OpenCV,通过以下链接访问 OpenCV 的 wiki 页面:

http://opencv.willowgarage.com/wiki/FullOpenCVWiki

安装 OpenCV

你可以在 Windows、Linux 或 Mac 中安装 OpenCV,下面是安装指南,里面包含了 OpenCV 最新稳定版的下载链接:

http://opencv.willowgarage.com/wiki/InstallGuide

安装完以后,你会在计算机上找到一个叫 samples 的文件夹,打开瞧瞧,里面有一些 OpenCV 的 wiki 链接。为了完成实验,你应该调研一番。

如果想深入了解 OpenCV,我们推荐 Gary Bradski 和 Adrian Kaehler 的《学习 OpenCV》。

代码应完成

你的 C 代码应该完成:

获取输入

你要处理摄像头拍摄的实时数据,因此你要做的第一件事就是捕获这些数据。有个叫

cvCreateCameraCapture(0) 的 OpenCV 函数可以帮到你。它返回一个指向 CvCapture 结构的指针,通过这个指针你就可以访问摄像头设备并获取图像。

计算机有可能找不到摄像头,所以调用函数时别忘了检查错误。如果无法访问摄像头,cvCreateCameraCapture(0) 会返回 NULL 指针。

捕获图像

你可以用 cvQueryFrame() 函数读取摄像头拍到的最新图像。它接收 CvCapture 指针作为参数,返回一个指向最新图像的指针。代码在开始时可能看起来像这样:

只要能肯定这幅图像中有小偷,就可以用下面这行代码把图像保存为文件:

检测入侵者

接下来是代码中最巧妙的部分:如何判断某一帧图像中出现了入侵者。

有一种方法是检测图像的移动量。OpenCV 提供了一些创建 Farneback 光流的函数。光流会比较两幅图像,然后告诉你像素移动了多少距离。

这部分内容需要你自己研究,你有可能会用 cvCalcOpticalFlowFarneback() 来比较两幅连续的图像,并创建光流。所以你需要写一些代码来测量两帧画面之间的移动量。一旦移动量超过了某个阈值,你就知道有个大家伙在摄像头前移动。

也许只要我缓缓缓缓缓地移动,它就发现不了我……

全身而退

当启动程序时,你可不希望摄像头把你走开的这个过程也记录下来,因此需要添加一段延时,好让你有时间离开房间。

可选:显示当前画面

测试期间,我们希望能看到当前程序“看到”的那帧画面,为此我们打开一个窗口,用它显示当前网络摄像头的输出。

只要用以下命令就可以在 OpenCV 中创建窗口:cvNamedWindow("Thief", 1);

在窗口中显示当前图像:cvShowImage("Thief", image);

检测器下线

当计算机能自动拍下那些鬼鬼祟祟的家伙,就说明你的 OpenCV 项目已经完成了。

勇者之路

本书最后会介绍一些高级主题。

在你开始探索 C 语言的高级功能前,请确保你的计算机能够使用这些特性。如果你用的是 Linux 或 Mac,很好,但如果你用的是 Windows,需要先安装 Cygwin。

准备好了的话就翻到下一页,挺胸走进大门……

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文