Я встречаю странное поведение, и, хотя я могу обойти его, я хотел бы знать, почему это так.Opencv: cv2.findContours изменяет изображение, которое уже было построено?
Когда я использую cv2.findContours, он изменяет исходное изображение, даже если я не передал его функции. Вот минимальный пример, где изображение можно найти here.
import matplotlib.pyplot as plt
import cv2
img =cv2.imread('a.jpg',0)
a1=plt.subplot(121)
plt.imshow(img, cmap='Greys')
ret, thresh = cv2.threshold(img,57,255,cv2.THRESH_BINARY)
a1=plt.subplot(122)
plt.imshow(thresh, cmap='Greys')
plt.show()
temp=thresh
del thresh
contours, hierarchy = cv2.findContours(temp,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
Когда я прокомментирую строку cv2.findContours, она отлично работает. Почему это?
В вашем коде как temp, так и thresh - это тот же объект. temp - это просто другой взгляд на thresh, а не на копию. поместите 'temp = thresh.copy()'. Это решит проблему. –
Спасибо, что заставляет работать! Но модификация должна произойти после того, как я ее построил, не так ли? Почему это изменяет сюжет? –
Я думаю, что .imshow нужно некоторое время и может произойти в фоновом потоке, поэтому изменение изображения в процессе построения графика может изменить (незавершенный) сюжет. Можете ли вы добавить 'waitKey (30)' за imshow или эквивалент python для waitKey (не знаете синтаксис python)? – Micka