cv2、cv、mahotas 和 SimpleCV 之间的图像转换

5

最近我在Python中处理很多与视觉相关的工作,切换格式时遇到了很多困难。当我使用Mahotas读取一张图片时,似乎不能将它转为cv2格式,尽管它们都使用numpy.ndarray。SimpleCV可以轻松地获取OpenCV图像,但是将SimpleCV图像转换为传统的cv或mahotas格式似乎是一项相当困难的任务。

需要一些格式转换语法。例如,如果我使用mahotas打开一个灰度图像,默认情况下会将其视为浮点颜色空间,尽管我已经将类型指定为numpy.uint8,但cv2似乎无法识别它为数组。我不知道该如何解决这个问题。对于彩色图像,我也没有太好的运气。我使用的是Python 2.7 32位在Ubuntu Oneiric Ocelot上。

提前感谢!


现在,我从未使用过Mahotas或SimpleCV,但您是否尝试通过cv.fromarray()将NumPy数组转换为cv图像?此外,您可以通过IplImage的.tostring()方法将cv图像转换为NumPy。(例如:array = numpy.fromstring(image.tostring(),dtype=numpy.float32)) 另外,请务必查看OpenCV的食谱。 最后,出于好奇,真的有必要使用所有不同的库吗?我认为,至少SimpleCV和OpenCV一起会有很多重叠。 - Ancallan
我不是专家,所以说出它的必要性是否很高并不明智,但通常我会尝试找到所有最快的运行方法并将它们结合起来,因为在低系统资源下速度至关重要。我一直在使用你提到的方法,这是容易的部分。Mahotas有一些超级快速的实现,我很想尝试它们,但我不能,因为我好像无法获得numpy!程序员们一直指出cv2与numpy更灵活,但速度较慢,所以我认为值得一试! - Subhamoy S.
我尝试在我的配备4GB内存的Intel i3笔记本电脑上使用SimpleCV运行Blob检测,但速度非常慢,即使在运行Blob检测之前已经对图像进行了大部分颜色信息的阈值处理。最终我必须在一台处理器比这个差得多且内存更有限的机器人上运行代码,但我并没有看到SimpleCV在那里提供任何可用的东西。 - Subhamoy S.
啊,是的,我记得当你第一次提到它时,他们似乎做了自己的斑点检测。如果我今天有机会,我会同时获取Mahotas和SimpleCV,并看看是否能给你一个合适的答案。如果你还没有看过的话,这也可能有所帮助!PerformancePython - Ancallan
我目前正在致力于使SimpleCV图像与cv2兼容。但是我卡在了pygame表面上。如果你知道有关它的任何信息,请在此处发布。 - Froyo
显示剩余3条评论
2个回答

2
我从未使用过Mahotas。但我目前正在使用SimpleCV。我刚刚发送了一个拉取请求,使SimpleCV的numpy数组与cv2兼容。
所以,基本上,
Image.getNumpy() -> cv2的numpy.ndarray Image.getBitmap() -> cv2.cv.iplimage Image.getMatrix() -> cv2.cv.cvmat
要将cv2 numpy数组转换为SimpleCV Image对象,
Image(cv2_image) -> SimpleCV.ImageClass.Image

2

只有在cv2和SimpleCV方面的经验,要从SimpleCV转换到cv2:

cv2_image = simplecv_image.getNumpyCv2()

将cv2转换为SimpleCV:

simplecv_image = Image(cv2_image.transpose(1, 0, 2)[:, :, ::-1])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接