我正在尝试使用在图像位置的数据帧上触发并转换这些图像,然后将其保存回同一目录中的功能。
保存图像的数据帧的头部
我定义的函数如下:
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)
然后我尝试使用此功能:
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,所以不确定自己做错了什么。
现在,我将函数更改为以下函数,它可以正常运行,但不会执行任何操作……甚至不执行print
语句。
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
上时卡住。
从PIL导入图像,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
答案 0 :(得分:1)
您再次使用相同的变量img
spring:
zipkin:
base-url: http://zipkin-server
discovery-client-enabled: true
enabled: true
sleuth.sampler.probability: 1.0
答案 1 :(得分:0)
如果可行,请尝试以下方法:
def image_build(img, df):
count = 1 # define count here so that it do not get intialised for each iteration
for img in df[img]:
pic = df[img]
if df['label'].any() == 0:
im = Image.open('your_image_path')
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 = 'your path'
img.save(save_dir + 'new_image_'+'1'+'.jpeg')
count += 1
答案 2 :(得分:0)
好的。我终于明白了!将计数移到iterrows()
已编辑
from PIL import Image, ImageEnhance
def image_build(img, df):
count = 1
for index,row in df.iterrows():
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
答案 3 :(得分:-1)
我认为这是文件路径的问题。用\(双反斜杠)或\
替换/