Разница между "import cv" и "import opencv.cv" с использованием Python + OpenCV?

Я пытаюсь использовать OpenCV с Python и конвертировать некоторый код на С++. Во всяком случае, если я это сделаю:

import cv
img = cv.LoadImage('image.jpg')

Это нормально. Или:

import opencv.cv as opcv
size = opcv.cvSize(40, 50)

Но в любом случае модуль cv не имеет структуры данных cvSize, а opencv.cv не имеет LoadImage. Итак, что конкретно имеет каждый модуль? Я пробовал искать документацию, но не смог ее найти. Должен ли я использовать его так, или моя настройка неправильно сконфигурирована?

2 ответа

Реальный ответ::), что оба "import opencv.cv" или "from opencv import cv" - это импортные копии старого стиля.

Начиная с OpenCV 2.0 используется упаковка в стиле Python нового стиля, и стиль, который вы должны использовать, выглядит следующим образом:

# import only cv, no opencv
# this also brings in sub modules such as highgui
import cv
# no "cv" prepended before all method names
src_mat = cv.LoadImageM('yourfilename.png', cv.CV_LOAD_IMAGE_GRAYSCALE)
# let show the image in a window
cv.NamedWindow('your name', 1)
cv.ShowImage('your name', src_mat)
cv.WaitKey

В оболочках старого стиля используется SWIG, обертки нового стиля, судя по исходному коду opencv 2.2, кажутся самодельными.


С

import cv

Вы импортируете модуль cv из того места, где он существует, в каталоги поиска модулей python. Это может быть другая версия модуля, хранящаяся где-то за пределами пакета opencv, так как кажется, что в этом случае.

Но с:

import opencv.cv

Вы явно импортируете версию opvv-пакетов cv, то есть в каталог установки для opencv-пакета. Эта версия почти гарантирует, что у вас есть один из opencv-пакета, и похоже, что он использует синтаксис:

from opencv import cv

licensed under cc by-sa 3.0 with attribution.