Некорректная установка цвета PLT

Всем привет. Имеется код, который ищет на изображении контуры. При выводе изображений на экран с помощью PLT, метод Laplace выводится в некорректной цветовой гамме (картинка под кодом), при этом при выводу через cv2.imshow такой проблемы не наблюдается. Как можно решить данную проблему?

import sys
from skimage import filters
from skimage import feature
from skimage.color import rgb2gray
import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
import os
from skimage.util import invert
    
src = cv.imread("C:\\temp\\map-forest-2.png", cv.IMREAD_COLOR)
    
src = cv.GaussianBlur(src, (3, 3), 0)
    
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)

edges_laplace = filters.laplace(gray)
edges_roberts = filters.roberts(gray)
edges_farid = filters.farid(gray)
edges_scharr = filters.scharr(gray)
edges_sobel = filters.sobel(gray)
edges_prewitt = filters.prewitt(gray)
edges_canny = feature.canny(gray)

fig, axes = plt.subplots(3, 3, figsize=(10, 10), sharex=True, sharey=True)
ax = axes.ravel()

ax[0].imshow(edges_laplace, cmap=plt.cm.gray)
ax[0].set_title('Laplace')
ax[0].axis('off')

ax[1].imshow(edges_scharr, cmap=plt.cm.gray)
ax[1].set_title('Scharr')
ax[1].axis('off')

ax[2].imshow(edges_roberts, cmap=plt.cm.gray)
ax[2].set_title('Roberts')
ax[2].axis('off')

ax[3].imshow(edges_prewitt, cmap=plt.cm.gray)
ax[3].set_title('Prewitt')
ax[3].axis('off')

ax[4].imshow(edges_farid, cmap=plt.cm.gray)
ax[4].set_title('Farid')
ax[4].axis('off')

ax[5].imshow(edges_sobel, cmap=plt.cm.gray)
ax[5].set_title("Sobel")
ax[5].axis('off')

ax[6].imshow(edges_canny, cmap=plt.cm.gray)
ax[6].set_title("Canny")
ax[6].axis('off')

fig.tight_layout()
plt.show()

Результат


Ответы (1 шт):

Автор решения: Alex Alex

Оператор Лапласа дает на выходе картинку как с положительными, так и с отрицательными значениями. Вывод через plt преобразует значения яркости в соответствиии c colormap, так, чтобы минимальное (отрицательное) значение стало 0, максимальное (положительное) 255. Вывод через cv2.imshow видимо просто приводит все отрицательные значения к 0. Как исправить: или редактировать cm или вручную занулить отрицательные значения.

→ Ссылка