所以我对编程相对较新,我需要一点帮助来解决这个问题。我在Windows计算机上使用带有Python 2.7的SimpleCV。我试图做的是让一个(自写的(程序告诉我沿预设行的像素值,这里最重要的是每个像素的颜色。
我真的不知道从哪里开始,因为我只找到了要求输入单个像素值的示例。
可能同样重要的是要知道,我不想用图片来做到这一点,而是用网络制作的实时视频来做到这一点,预设线将是我将用网络摄像头跟踪的物体的半径。
所以总结一下:我想用我的网络摄像头跟踪一个物体,需要一个程序来告诉我每个像素的颜色(以数字表示,例如"255"表示白色(沿着被跟踪物体的半径线。
这是我目前用于 obejct 跟踪的预写代码:
print __doc__
import SimpleCV
display = SimpleCV.Display()
cam = SimpleCV.Camera()
normaldisplay = True
while display.isNotDone():
if display.mouseRight:
normaldisplay = not(normaldisplay)
print "Display Mode:", "Normal" if normaldisplay else "Segmented"
img = cam.getImage().flipHorizontal()
dist = img.colorDistance(SimpleCV.Color.BLACK).dilate(2)
segmented = dist.stretch(200,255)
blobs = segmented.findBlobs()
if blobs:
circles = blobs.filter([b.isCircle(0.2) for b in blobs])
if circles:
img.drawCircle((circles[-1].x, circles[-1].y), circles[-1].radius(),SimpleCV.Color.BLUE,3)
if normaldisplay:
img.show()
else:
segmented.show()
这是跟踪对象的快照
我需要沿半径的像素颜色,因为我想知道从中心到边缘的光强度是如何降低的。
有人可能知道如何解决这个问题吗?谢谢!
假设您有中心(x0, y0)
。您希望遍历从 (x0, y0)
到 (x1, y1)
的半径上的像素,这是圆上的一个点。
在C++中,您将能够使用LineIterator来实现此目的。但是,我没有找到它用于python...
因此,您可以在Python中实现自己的LineIterator(或者采用由StackOverFlow贡献者制作的LineIterator(,或者如果性能不是应用程序中的关键问题,则可以诉诸可怕的黑客攻击:
- 创建与图像大小相同的黑色二进制蒙版
- 在这个面具上画出你的线
- 使用 NumPy 非零函数查找所有非黑色像素。
- 您已经获得了线条的像素(尽管它们不是有序的(
- 根据它们与中心的距离对它们进行排序。
我认为,仅使用我在另一个StackOverflow问题上链接到的行迭代器仍然是最简单的方法。