Предел многоуровневого изображения - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь получить маску изображения с несколькими уровнями порогового значения, принимая во внимание интенсивность пикселей, которые я хочу портировать изображение - белый для самых ярких областей, серый для чуть менее ярких областей и черный для относительно темных областей. Я сталкивался с различными статьями о многоуровневом пороге отсу, но не смог найти реализацию, которую мог бы использовать в качестве ссылки. После того, как у меня есть эти маски, я хочу выполнить bitwise_and для этих масок, чтобы получить исходную область изображения для белых и серых областей. Это возможно? В настоящее время я использую ret, thresh_ = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU) для получения масок.

Я пытался явно установить значения с помощью операторов if.

if(thresh_ <=80):
            thresh_ = 0

        elif(thresh_ >80 & thresh_ <=160):
            thresh_ = 150

        else: 
            thresh_ = 255

Но это не сработало, и это далоerror- Значение истинности массива с более чем одним элементом неоднозначно. Используйте a.any () или a.all ()

for file in glob.glob(path):
        img = cv2.imread(file)  


        #edge detection
        canny = auto_canny(img)


        #Dilation(Morphological function to increase edge width)
        img_dilate = cv2.dilate(canny, (3,3), iterations = 1)

1 Ответ

1 голос
/ 11 ноября 2019

Использование cv для этого может быть излишним;Вы, вероятно, можете взять изображение и использовать индексирование в стиле numpy, чтобы установить свои пороговые значения:

img[img < 80] = 0
img[(img < 160) & (img > 0)] = 150
img[img > 150] = 255

(не проверено)

Причина, по которой вы получаете сообщение об ошибке, заключается в том, чтопотому что сравнения с массивом не работают в "ванильном" питоне;что вы ожидаете от результата [1, 2, 3] > 2?

Но в Python со вкусом NumPy (который использует OpenCV), приведенное выше вернет поэлементное сравнение [False, False, True], что является качеством, которым мы пользуемсяиз приведенного выше блока кода.

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