如何获取某个区域中的像素值



所以我对编程相对较新,我需要一点帮助来解决这个问题。我在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问题上链接到的行迭代器仍然是最简单的方法。

相关内容

  • 没有找到相关文章

最新更新