问题描述
我正在尝试使用一个函数来遍历图像位置的数据框并转换这些图像,然后将它们保存回同一目录中.
I'm trying to use a function that itterates over a data frame of image locations and transforms those images then saves them back in the same directory.
保存图像的数据帧的头部
Head of the datafram that holds the images
我定义的函数如下:
from PIL import Image, ImageEnhance
def image_build(img, df):
for img in df[img]:
count = 1
pic = df[img]
if df['label'].any() == 0:
im = Image.open(df[img])
enh = ImageEnhance.Contrast(im)
im = enh.enhance(1.9)
im = im.rotate(90)
im = im.transpose(Image.FLIP_LEFT_RIGHT)
im = im.resize(224, 224)
save_dir = 'N:/Users/Howell/Kaggle/X_Ray/chest_xray/train/NORMAL/'
im.save(save_dir/'new_image_'+count+'.jpeg')
count += count + 1
print(count)
然后我尝试使用这个函数:
Then I try to use this function:
image_build('image', train_data)
但我收到以下错误:
> --------------------------------------------------------------------------- KeyError Traceback (most recent call
> last)
> C:\ProgramData\Anaconda3\envs\tensorflowenvironment\lib\site-packages\pandas\core\indexes\base.py
> in get_loc(self, key, method, tolerance) 2656 try:
> -> 2657 return self._engine.get_loc(key) 2658 except KeyError:
>
> pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
>
> pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
>
> pandas/_libs/hashtable_class_helper.pxi in
> pandas._libs.hashtable.PyObjectHashTable.get_item()
>
> pandas/_libs/hashtable_class_helper.pxi in
> pandas._libs.hashtable.PyObjectHashTable.get_item()
>
> KeyError:
> WindowsPath('N:/Users/Howell/Kaggle/X_Ray/chest_xray/train/NORMAL/IM-0580-0001.jpeg')
>
> During handling of the above exception, another exception occurred:
>
> KeyError Traceback (most recent call
> last) <ipython-input-144-d17ac9ecd789> in <module>
> ----> 1 image_build('image', train_data)
>
> <ipython-input-143-cf988e867715> in image_build(img, df)
> 2 for img in df[img]:
> 3 count = 1
> ----> 4 pic = df[img]
> 5 if df['label'].any() == 0:
> 6 im = Image.open(df[img])
>
> C:\ProgramData\Anaconda3\envs\tensorflowenvironment\lib\site-packages\pandas\core\frame.py
> in __getitem__(self, key) 2925 if self.columns.nlevels
> > 1: 2926 return self._getitem_multilevel(key)
> -> 2927 indexer = self.columns.get_loc(key) 2928 if is_integer(indexer): 2929 indexer = [indexer]
>
> C:\ProgramData\Anaconda3\envs\tensorflowenvironment\lib\site-packages\pandas\core\indexes\base.py
> in get_loc(self, key, method, tolerance) 2657
> return self._engine.get_loc(key) 2658 except KeyError:
> -> 2659 return self._engine.get_loc(self._maybe_cast_indexer(key)) 2660
> indexer = self.get_indexer([key], method=method, tolerance=tolerance)
> 2661 if indexer.ndim > 1 or indexer.size > 1:
>
> pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
>
> pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
>
> pandas/_libs/hashtable_class_helper.pxi in
> pandas._libs.hashtable.PyObjectHashTable.get_item()
>
> pandas/_libs/hashtable_class_helper.pxi in
> pandas._libs.hashtable.PyObjectHashTable.get_item()
>
> KeyError:
> WindowsPath('N:/Users/Howell/Kaggle/X_Ray/chest_xray/train/NORMAL/IM-0580-0001.jpeg')
我刚刚发现 Pillow,所以我不确定我做错了什么.
I've just discovered Pillow so I'm not sure what I'm doing wrong.
现在我将函数更改为以下内容,它运行时没有错误,但什么也不做……甚至print
语句也没有.
Now I'm changed the function to the following and it runs without error but does nothing...not even the print
statement.
def image_build(img, df):
for img in df[img]:
count = 1
if df['label'].any() == 0:
print('pass_image')
pic = df[img]
im = Image.open(pic)
enh = ImageEnhance.Contrast(im)
img = enh.enhance(1.9)
img = im.rotate(90)
img = im.transpose(Image.FLIP_LEFT_RIGHT)
img = im.resize(224, 224)
save_dir = 'N:/Users/Howell/Kaggle/X_Ray/chest_xray/train/NORMAL/'
img.save(save_dir / 'new_image_'+count+'.jpeg')
count += 1
在多人的帮助下,以下运行但只生成一张图片并且在计数 3
时卡住打印.
With help from multiple people, the following runs but only produces one picture and gets stuck printing on count 3
.
从 PIL 导入 Image,ImageEnhance
from PIL import Image, ImageEnhance
def image_build(img, df):
for index,row in df.iterrows():
count = 1
pic = row[img]
if row['label'] == 0:
im = Image.open(pic)
enh = ImageEnhance.Contrast(im)
im = enh.enhance(1.9)
im = im.rotate(90)
im = im.transpose(Image.FLIP_LEFT_RIGHT)
im = im.resize((750, 500))
save_dir = Path('N:/Users/Howell/Kaggle/X_Ray/chest_xray/train/NORMAL/')
count2 = str(count)
im.save(save_dir / str('new_image_'+count2+'.jpeg'))
count += count + 1
print(count)
else:
pass
推荐答案
你再次使用同一个变量 img
You use the same variable img again
from PIL import Image, ImageEnhance
def image_build(img, df):
for index,row in df.iterrows():
count = 1
pic = row[img]
if row['label'] == 0:
im = Image.open(pic)
enh = ImageEnhance.Contrast(im)
im = enh.enhance(1.9)
im = im.rotate(90)
im = im.transpose(Image.FLIP_LEFT_RIGHT)
im = im.resize(224, 224)
save_dir = 'N:/Users/Howell/Kaggle/X_Ray/chest_xray/train/NORMAL'
im.save(f'{save_dir}/new_image_{count}.jpeg'))
count += count + 1
print(count)
这篇关于如何在循环中保存 PIL 图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!