найти контуры на изображении, где объект и фон имеют почти одинаковый цвет - PullRequest
1 голос
/ 25 мая 2019

Как вы могли бы эффективно обнаружить края, если объект на изображении и на фоне имеют почти одинаковый цвет?Я попытался с кодом ниже, но он не дает то, что я хочу:

import cv2
import matplotlib.pyplot as plt
image = cv2.imread("image1.JPG")

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.bilateralFilter(gray, 11, 17, 17)
edged = cv2.Canny(gray, 10, 150)
edged = cv2.dilate(edged, None, iterations=1)
edged = cv2.erode(edged, None, iterations=1)

plt.imshow(edged)
plt.show()

image1 image1

ребер1 edges detected

1 Ответ

1 голос
/ 25 мая 2019

Вы не должны конвертировать изображение в оттенки серого, используя COLOR_BGR2GRAY, это приводит к потере цветовых данных. Что вы хотите сделать, это найти цветовое пространство, которое дает вам лучшие результаты обнаружения края. Есть три цветовых пространства, которые вы можете попробовать, и, вероятно, одно будет хорошо работать для вашего приложения, HSV, YCrCb и LAB.

Вот результат обнаружения острых краев на втором компоненте изображения LAB.

enter image description here enter image description here

lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
a_component = lab[:,:,1]
edged = cv2.Canny(a_component, 10, 50)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...