Использование функции Python OpenCV Moments с изображением - PullRequest
2 голосов
/ 05 сентября 2011

Я пытаюсь использовать функцию 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 ]

4 голосов
/ 12 февраля 2012

Похоже, вам нужно принудительно преобразовать IplImage в cvMat

Был предыдущий вопрос "Захват изображения в виде массива с помощью Python OpenCV"

Захват изображения в виде массива с использованием 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
0 голосов
/ 05 сентября 2011

Какую версию 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...