Почему мои повернутые изображения не сохраняются должным образом? - PullRequest
1 голос
/ 18 июня 2019

Мне нужно повернуть на 150 изображений различное количество, чтобы я мог правильно комментировать свои данные с помощью ограничительных рамок. Проблема в том, что по какой-то причине файлы изображений не сохраняются в повернутом виде после выполнения моего кода и ввода некоторых значений. Как сохранить эти изображения в повернутом виде, чтобы при повторном открытии файла изображения он уже был повернут?

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

import os
from skimage import io, transform
import cv2
from scipy import ndimage
import scipy.misc

folder_name = r'C:\Users\admin\Desktop\Pedro_Database\Setup_Data\test'
with os.scandir(folder_name) as folder:
    for file in folder:
        if (file.name.endswith('.bmp')):
            path = folder_name + '/' + file.name
            img = cv2.imread(path)
            rotate = 360
            rotated_img = img
            while(rotate != 0):
                cv2.imshow('image',rotated_img)
                cv2.waitKey(0)
                cv2.destroyAllWindows()
                rotate = int(input("Rotate By: "))
                rotated_img = ndimage.rotate(img, rotate, reshape=False)
            #os.remove(path)
            cv2.imwrite(path, rotated_img)
            print(file.name + " saved")

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

1 Ответ

0 голосов
/ 18 июня 2019

Я не привык к opencv, но я думаю, что проблема в этой строке

cv2.imwrite(path, rotated_img)

Его необходимо поместить в цикл while, чтобы при повороте изображения на rotated_img = ndimage.rotate(img, rotate, reshape=False) оно записывалось (сохранялось). Если это не так, ваш rotated_img останется таким же, как rotate = 0, когда выйдет из цикла while.

Кроме того, если вы хотите сохранить все повернутые изображения, вам следует рассмотреть возможность изменения path, например: path = path + str(i), где i увеличивается на 1.

i = 0
while(rotate != 0):
    cv2.imshow('image',rotated_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    rotate = int(input("Rotate By: "))
    rotated_img = ndimage.rotate(img, rotate, reshape=False)
    i += 1
    path_of_rotated_image = path + str(i)
    cv2.imwrite(path_of_rotated_image, rotated_img)
    print(file.name + " saved") # if you want to print
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...