2010-10-04 33 views
2

我想用OpenCV和Python对图像进行一些转换。我先用cvLoadImage函数读取图像,然后用imageData函数获取图像数据。OpenCV中的imageData函数与Python

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

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

我有一个C代码作为一个例子,下面的计算工作完全好:

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

但是在Python,正如我所说,我不能这样做。有关这个的任何线索? Python与C有关此声明有什么不同,以及如何在Python中应用这种计算?

回答

0

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

data = int(img.imageData) 

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

这可能不是然而,实现自己的目标的正确途径。你看过内置的库函数示例吗?

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

+0

我怀疑'int(imageData)'是你要找的东西,因为'imageData'将会是一个二进制字符串...... – 2010-10-04 23:38:34

+0

对数组操作的好的调用,虽然 - 它们非常有帮助。 – 2010-10-04 23:39:02

1

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

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

哦,dang,抱歉 - 没有注意到您使用的是Python绑定的第1版,所以我的回答可能不适用(我只知道版本2)。 – 2010-10-04 23:38:07

+0

imageData =>“\ x1e \ x1e)))*** /// 111666 @@@ IIIWWW]]] <<< ::: TTT ^^^}}} jjjQQQDDD <<< SSSYYYQQQNNN ;; ; MMMqqq \ x8f \ x8f \ x8dhhhWWWWRRRQQQPPPUUUgggvvv \ x8c \ x8c \ x8c \ x84“ – Resul 2010-10-04 23:44:45

+0

问题是,我通过查看C代码来实现函数,正如我所说的,他们能够执行通过使用ImageData进行转换。但我不明白他们是如何做到的。有没有办法将二进制字符串转换为Python中的整数?也许在C语言中的字符(我没有在C中experiencve)它会自动转换为整数。 – Resul 2010-10-04 23:47:24