Добавить значение переменной в функцию cv2.imwrite

Я хочу добавить значение строковой переменной в функцию cv2.imwrite()

Я сделал код для извлечения кадров из видео и проверки, присутствует ли мой целевой объект в кадре или нет. В настоящее время кадры, в которых находится цель, сохраняются как кадр0, кадр1 и так далее. Ниже мой код для того же

def target_non_target(input_frames_folder,model_file):

    count=0
    folders = glob(input_frames_folder)

    img_list = []

    for folder in folders:
        for f in glob(folder+"/*.jpg"):
            img_list.append(f)


    for i in range(len(img_list)):
        print(img_list[i])
        v1=os.path.basename(img_list[i])
        print(v1)
        img_name = os.path.splitext(v1)[0]
        print(img_name)
        image = cv2.imread(img_list[i])
        orig = image.copy()

        image = cv2.resize(image, (28, 28))
        image = image.astype("float") / 255.0
        image = img_to_array(image)
        image = np.expand_dims(image, axis=0)


        print("[INFO] loading network...")
        model = load_model(model_file)


        (non_target, target) = model.predict(image)[0]

        if target > non_target:
            label = "Target"

        else:
            label = "Non Target"

        probab = target if target > non_target else non_target
        label = "{}: {:.2f}%".format(label, probab * 100)


        output = imutils.resize(orig, width=400)
        cv2.putText(output, label, (10, 25),  cv2.FONT_HERSHEY_SIMPLEX,0.7, (0, 255, 0), 2)

        if target > non_target:
            cv2.imwrite("C:\\Python35\\target_non_target\\Target_images_new\\frame%d.jpg"%count,orig)
            count += 1
    #cv2.imshow("Output", output)
        cv2.waitKey(0)



frames_folder = ("C:\\Python36\\videos\\videos_new\\*")

model = ("C:\\Python35\\target_non_target\\target_non_target.model")

target_check = target_non_target(frames_folder,model)

В настоящее время кадры, в которых находится целевой объект, сохраняются как кадр0, кадр1 и т. д. Я хочу сохранить кадр с оригинальным именем изображения, которое входит в переменную IMG_NAME. Как я могу добавить его в функцию cv2.imwrite(). Мои несколько предыдущих попыток дали мне эту ошибку

TypeError: not all arguments converted during string formatting

%d означает «цифра», поэтому, если вы попытаетесь просто изменить %count на %img_name, форматирование будет некорректным — вам нужно использовать %s в строке, если вы хотите, чтобы строка содержала строку img_name.
alkasm 10.04.2019 21:48

Ваш вопрос определенно не ясен: вы хотите изменить имя выходного файла? cv2.imwrite не имеет ничего общего с именем файла. Просто создайте минимальный воспроизводимый пример только с обработкой имени файла и попробуйте использовать os.path.join или %s в форматировании строки.

Costantino Grana 10.04.2019 21:54
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
3 108
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно изменить форматирование строки при сохранении кадра с помощью cv2.imwrite(). В настоящее время ваше форматирование %d, которое пытается использовать целое число, когда оно должно быть строкой. Вы можете использовать %s или использовать встроенную функцию формат().

Изменять

cv2.imwrite("C:\\Python35\\target_non_target\\Target_images_new\\frame%d.jpg"%count,orig)

к

cv2.imwrite("C:\\Python35\\target_non_target\\Target_images_new\\frame{}.jpg".format(img_name),orig)

Другие вопросы по теме

При получении «ValueError: недостаточно значений для распаковки (ожидалось 2, получено 1)», как я могу заставить программу игнорировать и продолжать?
Могу ли я случайным образом добавить маленькое изображение (13x12) в массив пикселей (случайные пиксели того же размера, что и мое маленькое изображение)
Значение аргумента линии рисования в OpenCv
Как использовать набор данных Tensorflow с предварительной обработкой OpenCV?
Почему преобразование OpenCV RGB в YCbCr не дает такого же результата, как преобразование в Matlab с использованием функции ycbcr2rgb?
Нестандартный синтаксис; используйте & для создания указателя на элемент
Как без потерь присвоить значение типа T данным[i] типа uchar?
Включение OpenCV в проект Android Studio приводит к ошибке «Неразрешенные зависимости»
Преобразуйте полиномиальную подгонку обратно в пространство изображений
Как я могу выбрать все черные пиксели, которые граничат с краем изображения в PIL?