Я хочу добавить значение строковой переменной в функцию 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
Ваш вопрос определенно не ясен: вы хотите изменить имя выходного файла? cv2.imwrite
не имеет ничего общего с именем файла. Просто создайте минимальный воспроизводимый пример только с обработкой имени файла и попробуйте использовать os.path.join
или %s
в форматировании строки.
Вам нужно изменить форматирование строки при сохранении кадра с помощью 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)
%d
означает «цифра», поэтому, если вы попытаетесь просто изменить%count
на%img_name
, форматирование будет некорректным — вам нужно использовать%s
в строке, если вы хотите, чтобы строка содержала строкуimg_name
.