我需要得到一条线上的像素值,我使用了Python3和Pillow,在opencv中有一个LineIterator,它会返回两点之间所有合适的像素,但是我在Pillow的文档中没有找到类似的东西。
我使用Pillow是因为我最初看到this的帖子说python3不支持opencv,我知道它是2012年的,但似乎得到了this帖子的证实,我相信是今年的,因为帖子上没有年份。但当我运行pip3.2搜索opencv时,我可以看到一个pyopencv,但无法安装它。它说它找不到合适的版本(可能是python2.x到python3.x的问题)。
我的首选解决方案排序如下:
1.正确安装python3的opencv的方法(最好是opencv 2. 4. 8)
1.一种只使用Pillow获取线的像素的方法
1.不涉及额外库的简单解决方案(numpy/scipy)
1.其他一切
4条答案
按热度按时间67up9zun1#
我最终选择了基于Xiaolin Wu's line algorithm的纯python解决方案
yqyhoc1h2#
我尝试了@Rick建议的代码,但没有成功,然后我转到用Matlab编写的Xiaolin's code,并将其翻译成Python:
最后,我使用上面的代码和一个脚本进行绘图:
...我没有足够的信誉来发布图片:(
b4lqfgs43#
你应该试试opencv的开发版本3.0-dev,当前的2.4系列不支持python3,检查this answer。
当使用pillow时,Image.getpixel会给予你像素值,所以,你可以简单地在python中插入两个点,然后把所有这些索引给Image. getpixel,我不知道一个优雅的python实现插值来获得一条线上的所有像素。
所以,如果这太麻烦的话,你可以使用numpy/matplotlib来使它更容易(更懒),你可以使用matplotlib.path.Path来创建一个路径,并使用它的contains_points方法来遍历所有可能的点(例如,使用numpy.meshgrid来获取由这两个点定义的绑定框的所有像素坐标)。
rm5edbpk4#
Scikit-Image为需要现成产品的读者提供了一个解决方案: