Передать массив numpy в функцию opencv - PullRequest
0 голосов
/ 06 марта 2020

Я передал двоичное изображение (маску) в cv2.findContours() , и обнаружил, что mask изменится, хотя это входной параметр.

    print('scale: [{} , {}]'.format(np.amin(mask),np.amax(mask)))
    contours = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
    print('scale: [{} , {}]'.format(np.amin(mask),np.amax(mask)))

выведет:

scale: [0,255]
scale: [0,130]

, в то время как:


    print('scale: [{} , {}]'.format(np.amin(mask),np.amax(mask)))
    contours = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
    print('scale: [{} , {}]'.format(np.amin(mask),np.amax(mask)))

будет работать, и напечатает

scale: [0, 255]
scale: [0, 255]

Я думаю, это может быть чем-то вроде передачи по ссылке, но я не очень хорош в python и совершенно незнаком с python-opencv bind. Кто-нибудь может сказать мне причину?

Заранее спасибо!

1 Ответ

0 голосов
/ 06 марта 2020

В do c упоминается:

Python: cv.FindContours (изображение, хранилище, режим = CV_RETR_LIST, метод = CV_CHAIN_APPROX_SIMPLE, смещение = ( 0, 0)) → контуры Параметры:
image - Источник, 8-битное одноканальное изображение. Ненулевые пиксели рассматриваются как 1. Нулевые пиксели остаются 0, поэтому изображение обрабатывается как двоичное. Вы можете использовать compare (), inRange (), threshold (), adaptiveThreshold (), Canny () и другие, чтобы создать двоичное изображение из оттенков серого или цветного изображения. Функция изменяет изображение при извлечении контуров. Если режим равен CV_RETR_CCOMP или CV_RETR_FLOODFILL, вход также может быть 32-разрядным целочисленным изображением меток (CV_32SC1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...