这个问题有点与语言无关,但我选择使用的工具是numpy数组。
我的操作是通过PIL获取两幅图像的差异:
img = ImageChops.difference(img1, img2)
我想要找到包含两张图片之间变化的矩形区域。当然,可以使用内置的.getbbox()
方法,但如果有两个具有变化的区域,它将返回从一个区域到另一个区域的框,而如果每个角落只有1个像素的变化,则会返回整个图像。
例如,考虑以下情况,其中o
是非零像素:
______________________
|o ooo |
| oooo ooo |
| o |
| o o |
| |
| oo o |
| o o ooo |
| oo ooooo |
| ooo |
| o |
|____________________|
我想获取包含每个非零区域边界框的4x4元组。对于边缘情况,
oooo
o
o o
结构,我并不担心它是如何处理的 - 无论是分别获取两个部分还是一起获取,因为倒L形状的边界将完全重叠在单个像素的边界上。
我以前从未在图像处理方面做过这样高级的事情,所以我想在真正编写任何代码之前先获得一些输入(如果我已经使用的模块中有现成的方法,我欢迎它们!)。
我的伪代码版本大概是这样的:
for line in image:
started = False
for pixel in line:
if pixel and not started:
started = True
save start coords
elif started and not pixel:
started = False
save end coords (x - 1 of course)
这段代码应该会给我一列坐标,但我需要确定这些区域是否连续。我可以用图形搜索(我们在算法课上做了很多DFS和BFS)实现吗?当然,我猜我也可以用之前的循环来实现这个目标?
我不会处理“大”图像 - 它们是从网络摄像头中获取的,我目前最好的摄像头只有640x480的分辨率。最多我可能会处理720p或1080p,但那已经远远超出了我的实际需求。
因此,我的问题是:我走在正确的道路上吗,还是步履蹒跚?更重要的是,有没有内置函数可以避免我重新发明轮子?最后,有没有一些好的资源(教程、论文等)能够帮助我解决这个问题?
谢谢!
object_slices
列表进行排序。例如,请查看此处的最后几行:https://gist.github.com/joferkington/5074650#file-gistfile1-py - Joe Kingtonnp.sum(mahotas.labeled.bwperim(object, n=8)*object)
- chimpsarehungry