Нужна помощь в ошибке обрезки изображения в Python

Я новичок в Python и в качестве домашнего задания написал функцию, которая должна обрезать изображение.

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

Ошибка

OSError: невозможно записать режим F как JPEG

И ещё один небольшой вопрос. это заставляет меня ввести команду imagio.read, imageio.v2.read, и я не знаю почему.

Любая помощь будет оценена по достоинству. Большое спасибо.

Полная ошибка:

Traceback (most recent call last):
File "C:\\Users\\מחשב\\AppData\\Roaming\\Python\\Python310\\site-packages\\PIL\\JpegImagePlugin.py", line 650, in \_save
rawmode = RAWMODE\[im.mode\]
KeyError: 'F'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "C:\\Users\\מחשב\\Desktop\\python\\עיבוד תמונה\\חיתוך.py", line 16, in \<module\>
imageio.v2.imwrite('crop_img.jpg', new_pic)
File "C:\\Users\\מחשב\\AppData\\Roaming\\Python\\Python310\\site-packages\\imageio\\v2.py", line 396, in imwrite
with imopen(uri, "wi", \*\*imopen_args) as file:
File "C:\\Users\\מחשב\\AppData\\Roaming\\Python\\Python310\\site-packages\\imageio\\core\\v3_plugin_api.py", line 367, in __exit__
self.close()
File "C:\\Users\\מחשב\\AppData\\Roaming\\Python\\Python310\\site-packages\\imageio\\plugins\\pillow.py", line 144, in close
self.\_flush_writer()
File "C:\\Users\\מחשב\\AppData\\Roaming\\Python\\Python310\\site-packages\\imageio\\plugins\\pillow.py", line 485, in \_flush_writer
primary_image.save(self.\_request.get_file(), \*\*self.save_args)
File "C:\\Users\\מחשב\\AppData\\Roaming\\Python\\Python310\\site-packages\\PIL\\Image.py", line 2439, in save
save_handler(self, fp, filename)
File "C:\\Users\\מחשב\\AppData\\Roaming\\Python\\Python310\\site-packages\\PIL\\JpegImagePlugin.py", line 653, in \_save
raise OSError(msg) from e
OSError: cannot write mode F as JPEG

Мой код:

import numpy as np
import imageio

def pic_crop(img,height,dy,width,dx):
    new_img=np.zeros((dy,dx))
    for row in range(0,dy):
        for column in range(0,dx):
            new_img[row,column]=img[height+row,width+column]
return new_img

pic=imageio.v2.imread('myimageGR.jpg')
new_pic= pic_crop(pic,30,90,50,80)
print(new_pic.shape)
imageio.v2.imwrite('crop_img.jpg', new_pic)
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

new_img.dtype — это float64, imageio.v2.imwrite ожидает uint8 для формата jpeg, поэтому либо сделайте

new_img=np.zeros((dy,dx),dtype='uint8')

или сделай

imageio.v2.imwrite('crop_img.jpg', new_pic.astype('uint8'))

также вы можете упростить pic_crop, чтобы избежать этой проблемы

def pic_crop(img,height,dy,width,dx):
    new_img = np.array(img[height:height+dy, width:width+dx])
    return new_img

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