OpenCV и Matplotlib показывают изображение по-разному - PullRequest
0 голосов
/ 09 марта 2020

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

sample_image.jpg Три метода построения показаны в следующем коде Python.

    img = cv2.imread('sample_image.jpg')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    gaussian = cv2.GaussianBlur(gray,(3,3),0)

    sobely = cv2.Sobel(gaussian,cv2.CV_64F,1,0,ksize=5)  # y
    sobelyy = cv2.Sobel(sobely,cv2.CV_64F,1,0,ksize=5)  # y

    # method 1
    cv2.imshow('sobelyy', sobelyy) 

    # method 2
    cv2.imwrite('filtered_img1.JPG', sobelyy)
    s_img = cv2.imread('filtered_img1.JPG')
    cv2.imshow('s_img', s_img)

    # method 3
    plt.figure()
    plt.imshow(sobelyy, cmap='gray')
    plt.title('Filtered sobelyy image, B(x,y)'), plt.xticks([]), plt.yticks([])
    plt.show()

Полученные изображения:

метод 1

метод 2

метод 3

Я хочу получить изображение, полученное по методу 3.

Почему изображения показываются по-разному? Как я могу сохранить выходное изображение как результат метода 3?

Заранее спасибо!

1 Ответ

0 голосов
/ 09 марта 2020

Почему изображения отображаются по-разному?

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

Что касается ваших первых двух методов, то они должны выглядеть примерно одинаково, и они выглядят, когда я пробую ваш код.

Как мне сохранить выходное изображение, как результат метода 3?

Matplotlib имеет встроенную функцию для записи построенных изображений в dis c, просто используйте:

plt.savefig('your_filename.png')
...