Python 目标系统

3 投票
2 回答
1254 浏览
提问于 2025-04-17 19:26

我正在做一个项目,需要编程一个树莓派,让它从网络摄像头获取一张图片,然后在这张图片中寻找一个盒子,并通过盒子的大小比例来识别它是什么盒子。这个盒子的颜色会和周围环境有明显的区别。能识别出盒子与树莓派之间的距离和角度也是很不错的。

我看到的资料都表明这应该是可行的,但我花了好几天寻找相关信息,还是没有找到真正能帮助我的东西。这个项目是我第一次使用Python,所以我还是个新手。如果能帮我解决其中的小部分问题,我会非常感激。

这是我目前的代码,虽然不多,但它只是在从网络摄像头获取一张图片 :/

import imgproc
from img imgproc *
camera = Camera(160, 120)
viewer = Viewer(160, 120)
n = 1
while (n > 0):
     img = camera.grabImage()
     viewer.displayImage(img)

2 个回答

0

你可以尝试从GitHub上的仓库安装SimpleCV。使用SimpleCV,你可以通过Image.hueDistance命令来获取物体的颜色。如果你使用findBlobs命令来找到你的盒子,每个物体都会有一个参数来表示它的长宽比。我们刚刚发布了关于SimpleCV的完整PyCon教程,可以在这里查看。你也可以单独查看幻灯片,在这里。我们听说在RaspberryPi上安装PyGame(这是SimpleCV的一个依赖)时会遇到一些问题。这个教程可能会解决这些问题

2

这不是一个完整的解决方案,但提供了一些不错的思路,帮助你入门 :)

首先,OpenCV是一个开源的计算机视觉库,最初是用C语言写的,Python也可以使用它。你可以在这里找到相关的文档:http://opencv.willowgarage.com/documentation/python/index.html

解决计算机视觉问题的第一步是预处理。特别是,知道盒子的颜色不同会帮助你很多——这意味着我们可以通过颜色来进行阈值处理,生成一张图像:盒子不在的地方是黑色,盒子在的地方是白色。你可以使用类似于这个链接中的技术:http://aishack.in/tutorials/thresholding/

接下来,你可以按照这个博客中描述的类似于数独抓取/求解的过程进行操作——首先进行斑点提取(http://en.wikipedia.org/wiki/Blob_extraction),然后进行霍夫变换来获取直线,最后你可以比较这些直线之间的距离,以确定盒子的比例。更多信息可以参考这个链接:http://aishack.in/tutorials/sudoku-grabber-with-opencv-plot/

基本上,你可以多看看别人用OpenCV做的数独求解器,直到你大致明白怎么做,因为有很多不错的教程,这也是计算机视觉项目的一个简单示例:https://www.google.com.au/search?q=sudoku+opencv&aq=f&oq=sudoku+opencv&aqs=chrome.0.57j60l3j0l2.1506&sourceid=chrome&ie=UTF-8

撰写回答