【问题标题】:imageData function in OpenCV with Python使用 Python 的 OpenCV 中的 imageData 函数
【发布时间】:2010-10-06 05:49:41
【问题描述】:

我正在尝试使用 OpenCV 和 Python 对图像进行一些转换。我首先使用 cvLoadImage 函数读取图像,然后使用 imageData 函数获取图像数据。

img = highgui.cvLoadImage("x.png",1)
data = img.imageData

问题是,imageData 函数返回一个字符串数据,当我尝试对图像数据进行一些计算时,它给了我错误,因为例如Python中不允许对字符串做减法运算。

我有一个C代码作为例子,下面的计算效果很好:

x= data[100] + 4*data[40] -data[20]

但在 Python 中,正如我所说,我不能这样做。对此有任何线索吗?关于此语句,Python 与 C 有什么区别?如何在 Python 中应用这种计算?

【问题讨论】:

    标签: python opencv


    【解决方案1】:

    正如您所说,imageData 属性返回一个包含“原始图像数据”的二进制字符串(不过我不记得是什么格式了)。相反,您应该通过索引img 对象来访问图像数据:

    >>> img = cv.CreateImage((10, 10), 8, 1)
    >>> img[0, 0]
    0.0
    >>> img[0, 3] = 1.3
    >>>
    

    【讨论】:

    • 哦,该死,抱歉——没有注意到您使用的是 Python 绑定的版本 1,所以我的回答可能不适用(我只知道版本 2)。
    • 我的 imageData 的一个例子 => "\x1e\x1e)))***///111666@@@IIIWWW]]]
    • 问题是,我正在通过查看 C 代码来实现一个函数,正如我所说,他们能够使用 ImageData 进行转换。但我不明白他们是怎么做到的。有没有办法在 Python 中将二进制字符串转换为整数?也许在 C 语言中,字符(我在 C 中没有经验)它会自动转换为整数..
    • 要将“字符串”转换为“整数”,您可以使用以下内容:data = [ord(ch) for ch in imageData] — 然后您可以执行data[3] = data[6] + data[8] 之类的操作。但是,转换会(比较)慢,所以如果我是你,我会查看img 上可用的方法,看看是否有类似getPixel 的方法。您可以使用dir(img) 列出img 上的所有属性(方法和字段)。
    • 当然,如果可以更新您的 OpenCV 绑定并使用第 2 版,那么您可以使用我在答案中显示的语法(以及许多其他令人高兴的事情)......但我意识到这可能是不可能的。
    【解决方案2】:

    如果您确定以字符串形式获取的数据实际上是整数,则可以将其转换为 int。

    data = int(img.imageData)
    

    http://docs.python.org/library/functions.html#int

    但是,这可能不是实现目标的正确方法。你看过内置的库函数示例吗?

    http://opencv.willowgarage.com/documentation/python/operations_on_arrays.html

    【讨论】:

    • 我怀疑int(imageData) 是你要找的,因为imageData 将是一个二进制字符串......
    • 很好地调用了数组操作——它们非常有帮助。
    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 2012-08-03
      • 2013-03-08
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 2012-04-17
      • 1970-01-01
      相关资源
      最近更新 更多