使用Python OpenCV的矩函数处理图像
我正在尝试在一张灰度图像上使用Python的opencv函数Moments()
,但是我收到了一个TypeError
的错误提示:
>>> img = cv.LoadImage('example_image.jpg', cv.CV_LOAD_IMAGE_GRAYSCALE)
>>> moments = cv.Moments(img)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Argument '' must be CvSeq, CvArr, or a sequence of numbers
>>>
我相信我的用法是正确的,因为在opencv的文档中有说明,可以在这里找到,其中GetHuMoments()
是使用Moments()
的结果。
我认为我已经正确安装了opencv和numpy,因为我在其他很多方面都能成功使用它们,而且我在OS X 10.6和Red Hat 6上都遇到了这个问题。
同样的问题在opencv用户组中也被提问过,但我不想像回复中所说的那样先将图像转换为轮廓。
2 个回答
0
你在用哪个版本的Python和OpenCV?我在用Python 2.6.6和OpenCV 2.1.0时得到了不错的结果。
~/Desktop$ ./opencv-test.py
> `enter code here`/home/tyndyll/Desktop/opencv-test.py(8)<module>()
-> img = cv.LoadImage( 'iron-maiden-live-after-death-iron-maiden_1920x1200_79442.jpg', cv.CV_LOAD_IMAGE_GRAYSCALE )
(Pdb) n
> /home/tyndyll/Desktop/opencv-test.py(9)<module>()
-> moments = cv.Moments( img )
(Pdb) p img
<iplimage(nChannels=1 width=1920 height=1200 widthStep=1920 )>
(Pdb) n
> /home/tyndyll/Desktop/opencv-test.py(10)<module>()
-> print "Done"
(Pdb) p moments
<cv.cvmoments object at 0x7f31fb5437b0>
(Pdb) c
Done
4
看起来你需要强制把IplImage转换成cvMat。
之前有个问题是“用Python OpenCV捕获图像为数组”。
比如对我来说:
>>> mm=cv.Moments(img)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Argument '' must be CvSeq, CvArr, or a sequence of numbers
>>> mat=cv.GetMat(img)
>>> mm=cv.Moments(mat)
>>> mm.m00
181428.0