Доброго времени суток.Возникла необходимость нахождения наиболее подобных изображений в двух разных папках и формирования пар оригинал/подобие
Изображения в обеих папках имеют одинаковый стандарт (jpeg с одинаковым разрешением)
Был написан код (не ругайте строго за стиль, я только начинаю постигать python
P.S. строки были добавлены исключительно для собственного понимания почему код без них всегда даёт нулевую гистограмму thumb_file и будет стёрт после исправления ошибки
При попытке исполнения кода получаю
Поиски в сети натолкнули на мысль, что ошибка возникает так как не выполняется строчка
Т.е. изображение не может быть прочитано
Вместе с тем, часть кода
исполняется и изображение открывается.
Хочу также заметить, что
срабатывает отлично и, при желании, эти изображения легко открываются внутри цикла через plt.imshow
Подскажите пожалуйста, в чём может быть причина такой ошибки и как её исправить
Заранее благодарен
Изображения в обеих папках имеют одинаковый стандарт (jpeg с одинаковым разрешением)
Был написан код (не ругайте строго за стиль, я только начинаю постигать python
Python:
frames_path = "E:/My_prog/frames/"
analysis_path = "E:/My_prog/analysis/"
for frame_file in os.listdir(frames_path): #перебираем файлы фреймов
difference = 2
proper_image = ""
frame = cv2.imread(frame_file, 0) #читаем фрейм
frame_hist = cv2.calcHist([frame], [0], None, [256], [0, 256]) #строим гистограмму
for thumb_file in os.listdir(analysis_path): #перебираем файлы для анализа
thumb = cv2.imread(thumb_file, 0) #читаем файл для анализа
img = Image.open("%s%s"%(analysis_path, thumb_file))
img.show()
thumb_hist = cv2.calcHist([thumb], [0], None, [256], [0, 256])
plt.imshow(thumb)
plt.show()
img_hist_diff = cv2.compareHist(frame_hist, thumb_hist, cv2.HISTCMP_BHATTACHARYYA)
img_template_probability_match = cv2.matchTemplate(frame_hist, thumb_hist, cv2.TM_CCOEFF_NORMED)[0][0]
img_template_diff = 1 - img_template_probability_match
commutative_image_diff = img_hist_diff + (img_template_diff/10)
if difference>commutative_image_diff:
difference = commutative_image_diff
proper_image = thumb_file
print (frame_file)
print (proper_image)
print (difference)
P.S. строки были добавлены исключительно для собственного понимания почему код без них всегда даёт нулевую гистограмму thumb_file и будет стёрт после исправления ошибки
Python:
plt.imshow(thumb)
plt.show()
При попытке исполнения кода получаю
Код:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-159-367fb0418268> in <module>
18 thumb_hist = cv2.calcHist([thumb], [0], None, [256], [0, 256])
19 # print (thumb_file)
---> 20 plt.imshow(thumb)
21 plt.show()
22 # print (thumb_hist)
........................................
TypeError: Image data of dtype object cannot be converted to float
Поиски в сети натолкнули на мысль, что ошибка возникает так как не выполняется строчка
Python:
thumb = cv2.imread(thumb_file, 0)
Вместе с тем, часть кода
Python:
img = Image.open("%s%s"%(analysis_path, thumb_file))
img.show()
Хочу также заметить, что
Python:
frame = cv2.imread(frame_file, 0) #читаем фрейм
frame_hist = cv2.calcHist([frame], [0], None, [256], [0, 256]) #строим гистограмму
Подскажите пожалуйста, в чём может быть причина такой ошибки и как её исправить
Заранее благодарен