Вы не должны конвертировать изображение в оттенки серого, используя COLOR_BGR2GRAY
, это приводит к потере цветовых данных. Что вы хотите сделать, это найти цветовое пространство, которое дает вам лучшие результаты обнаружения края. Есть три цветовых пространства, которые вы можете попробовать, и, вероятно, одно будет хорошо работать для вашего приложения, HSV, YCrCb и LAB.
Вот результат обнаружения острых краев на втором компоненте изображения LAB.
lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
a_component = lab[:,:,1]
edged = cv2.Canny(a_component, 10, 50)