2

Я изучаю компьютерное зрение прямо сейчас. И я очень смущен о части Кандиновый детектор края.Может ли Canny работать в OpenCV как с одним каналом изображения в оттенках серого, так и с тремя каналами цветного изображения?

И когда я пытаюсь генерировать цвет изображения на осторожном в OpenCV. У меня есть несколько вопросов.

И вот код, который я пробовал.

def auto_canny(image, sigma=0.33): 
    v = np.median(image) 
    lower = int(max(0, (1.0 - sigma) * v)) 
    upper = int(min(255, (1.0 + sigma) * v)) 
    edged = cv2.Canny(image, lower, upper) 

тогда

##### first situation ##### 
img = cv2.imread('mango.jpg') 
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
auto = auto_canny(gray) 
cv2.imwrite('mango_gray_edge.jpg', auto) 

в этой ситуации, я получил изображение вроде этого: enter image description here

##### second situation ##### 
img = cv2.imread('mango.jpg') 
auto = auto_canny(img) 
cv2.imwrite('mango_color_edge.jpg', auto) 

в этой ситуации, я получил изображение вроде этого: enter image description here

и это оригинал inal image: i.stack.imgur.com/45TAU.jpg (извините за это, у меня недостаточно репутации, чтобы опубликовать более двух ссылок ...)

Разница между первой ситуацией и второй ситуацией заключается в том, Я конвертирую цветное изображение в полутоновое изображение. BUT, я смущен об этом. Потому что,

В первой ситуации я конвертирую изображение в оттенки серого, поэтому изображение представляет собой одноканальное изображение. И во второй ситуации изображение по-прежнему остается тремя каналами.

И край намного лучше, когда я не преобразовал его в полутоновое изображение, как вторая ситуация.

SO мой вопрос,

1) Имеет ли Осторожные функцию в OpenCV включают метод для преобразования изображения в оттенках серого? Я имею в виду, мне нужно преобразовать изображение в оттенки серого, прежде чем использовать cv2.Canny()

2) Почему можно было позаниматься как с одним каналом (конвертация первой ситуации в оттенки серого), так и с тремя каналами (исходное изображение, такое как вторая ситуация) одновременно?

3) Как работает canny на самом деле? Не могли ли вы иметь дело с цветным изображением напрямую или цветное изображение сначала нужно преобразовать в полутоновое изображение?

4) Из шагов canny, когда мы вычисляем градиент, я думаю, что он должен быть одним каналом, тогда он может быть рассчитан. Если изображение представляет собой цветное изображение, включая три канала, как мы можем вычислить градиент? Рассчитываем ли мы три канала отдельно? Как работает?

ответ

2

Да, реализация Canny OpenCV может обрабатывать несколько каналов.


Помните, что OpenCV является открытым исходным кодом, поэтому вы можете просто проверить реализацию, чтобы найти такую ​​информацию.

В принципе, что делает Канне, прежде чем подавление не-максимумов, чтобы вычислить величину (norm) градиента для каждого пикселя, в соответствии с производными Собели (dx и dy). Если у вас более одного канала, как вы можете видеть in the source code, величина градиента для данного пикселя является самой высокой среди всех каналов ch.

+0

Он может обрабатывать цветные изображения? Когда они это совершили? В моей книге говорится, что Canny обрабатывает только оттенки серого. – Rich