#python #python-3.x #opencv #error-handling #opencv-python
#python #python-3.x #opencv #обработка ошибок #opencv-python
Вопрос:
Я пытаюсь устранить ошибку, которую продолжает выдавать cv2.imwrite, она продолжает доставать точно такое же изображение в папке, а затем говорит «-215: ошибка утверждения» в строке cv2.imwrite, и мне не очень везет с написанием отказоустойчивых систем для такого типа ошибок, она читается правильно, поэтому я понятия не имею, почему она не записывается. Я пробовал эти два метода:
writeStatus = cv2.imwrite('output/' i, cropped)
if writeStatus is True:
print('Image Written')
else:
print('Error saving photo')
cv2.imwrite('rejected/' i, image)
if cv2.imwrite('output/' i, cropped) == True:
print('Image write succeeded')
else:
if cv2.imwrite('rejected/' i, image)== True:
print ('Cropped image could not be written, sent to rejects')
else:
print('writing error, script stopped')
break
Я понятия не имею, почему он не сохранит изображение, похоже, что пока он ненавидит только это конкретное, даже если изображение одно в папке, оно не будет его записывать, честно говоря, мне все равно, пока я могу выводить подобные изображения в папку reject вместо того, чтобы это убивало весь скрипт.
РЕДАКТИРОВАТЬ Я пытался использовать
writeStatus = cv2.imwrite('output/' i, cropped)
if writeStatus is True:
print('Image Written')
else:
print('Error saving photo')
continue
и ошибка все равно остановила скрипт
Комментарии:
1. вы пытаетесь сохранить пустое изображение. Проверьте, почему «обрезанный» является пустым
2. Я понятия не имею, почему он пустой, он отлично обрабатывает изображение, пока не попадет в команду imwrite. Насколько я могу судить, ничто не должно возвращать значения None.
3. @Miki Я добавил проверку, чтобы убедиться, что значения обрезки не равны None или 0, и они были в порядке, прошел проверку, а затем выдал ту же ошибку
Ответ №1:
Предложение # 1
Если мы посмотрим на инструкцию:
writeStatus = cv2.imwrite('output/' i, cropped)
'output/' i
предполагается, что это имя изображения, а обрезанное должно быть изображением.
Насколько я понимаю, вы хотите сохранить i
-е значение, но правильный способ:
from os.path import join
filename = join('output', str(i) '.png') # you can use other extensions like .jpg
cv2.imwrite(filename, cropped)
Но это верно, если cropped
переменная является изображением.
Предложение # 2
Если проблема возникает из-за одного изображения, а вам все равно, вы могли бы использовать try-except
block и continue
ключевое слово
try:
writeStatus = cv2.imwrite(...)
.
.
except:
continue
Комментарии:
1. Однако почему это может вызвать ошибку только для одного изображения? Все остальные изображения работают нормально. вывод / — это путь к файлу, у меня есть исходное имя файла, сохраненное в переменной i.
2. Только для одного изображения? затем вы можете использовать
continue
ключевое слово, чтобы пропустить изображение.3. Пытался использовать ключевое слово continue с writeStatus, чтобы, если writeStatus было false, это запускало бы continue, не повезло, ошибка по-прежнему останавливала скрипт.
4. Я обновил свой ответ, пожалуйста, посмотрите на часть предложения № 2
5. Хорошо, это работает, я добавил функцию для вывода проблемного изображения в отдельную папку, и это сработало как по волшебству. Не уверен, почему оператор true false не работает, из того, что я могу сказать, cv2.imwrite должен выводить true или false, потому что функция записи изображения печати работает, если это true. Для меня это загадка.