порог cv2 не работает правильно на втором изображении - PullRequest
0 голосов
/ 07 ноября 2018

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

Я написал короткий и простой скрипт с использованием библиотеки cv2:

#!/usr/bin/env python

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt


#GRAYSCALE ONLY FOR TESTING
#Test with person appearing in image
img1 = cv.imread("images/1.jpg", 0)
img2 = cv.imread("images/2.jpg", 0)
img3 = cv.subtract(img1, img2)
ret,thresh1 = cv.threshold(img3,90,255,cv.THRESH_BINARY)


#Test with satelite image of japan landslide changes after earthquake 
jl_before = cv.imread("images/japan_earthquake_before.jpg",0)
jl_after = cv.imread("images/japan_earthquake_after.jpg",0)
jl_subtraction = cv.subtract(jl_before, jl_after)
ret,thresh2 = cv.threshold(img3,20,255,cv.THRESH_BINARY)

images = [img1, img2, thresh1, jl_before, jl_after, thresh2]
titles = ["Image1", "Image2", "Changes", "Japan_Before", "Japan_After", "Japan_Changes" ]
for i in range(6):
    plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')
    plt.title(titles[i])
    plt.xticks([]),plt.yticks([])
plt.show()

Результат выглядит так:

enter image description here

Почему маска с изменениями из первого набора изображений присутствует в маске второго набора изображений?

Я использовал разные переменные, thresh1 и thresh2.

Любая помощь будет принята с благодарностью, так как я не могу найти проблему.

1 Ответ

0 голосов
/ 07 ноября 2018

Поскольку вы пропустили изменение при вставке копии:

ret,thresh2 = cv.threshold(img3,20,255,cv.THRESH_BINARY)
                           ^^^^
...