因此,由于我对编程还比较陌生,所以我需要一些帮助来解决这个问题。 我在 Windows 计算机上使用 SimpleCV 和 Python 2.7。 我想要做的是获得一个(自写的)程序来告诉我沿着预设线的像素值,这里最重要的是每个像素的颜色。
我真的不知道从哪里开始,因为我只找到了要求提供单个像素值的示例。
可能还需要知道的重要一点是,我不想用图片来做这件事,而是用网络摄像头制作的实时视频,预设线将是我将用网络摄像头跟踪的对象的半径.
总结一下:我想用我的网络摄像头跟踪一个对象,并且需要一个程序来告诉我沿被跟踪半径线的每个像素的颜色(以数字表示,例如“255”代表白色)对象。
这是我目前用于对象跟踪的预写代码:
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()
here is a snapshot of the tracked object
我需要沿半径的像素颜色,因为我想知道光强度如何从中心到边缘减弱。
有没有人知道如何解决这个问题? 谢谢!
最佳答案
假设您有中心 (x0, y0)
。您想要遍历从 (x0, y0)
到 (x1, y1)
的半径上的像素,这是圆上的一个点。
在 C++ 中,您可以使用 LineIterator为了这个目的。但是,我没有找到它用于 python...
因此,您可以在 Python 中实现自己的 LineIterator(或采用 the one made by a nice StackOverFlow contributor ),或者如果性能不是您应用程序中的关键问题,您可以求助于一个可怕的 hack:
- 创建一个与您的图像大小相同的黑色二进制蒙版
- 在这个面具上画出你的线条
- 使用 NumPy nonzero function 查找所有非黑色像素.
- 你得到了你的线条的像素(尽管它们没有排序)
- 根据它们与中心的距离对它们进行排序。
我认为仅采用我在另一个 StackOverflow 问题上链接到的行迭代器对您来说仍然是最简单的方法。
关于python - 如何获取某个区域的像素值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38741551/