5
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Tôi đang cố gắng chuyển đổi hình ảnh độ phân giải cao thành một thứ dễ quản lý hơn cho việc học máy. Hiện tại tôi có mã để thay đổi kích thước hình ảnh theo chiều cao và chiều rộng mà tôi muốn tuy nhiên tôi phải thực hiện một hình ảnh tại một thời điểm không tệ khi tôi chỉ thực hiện hình ảnh 12-24 nhưng tôi muốn mở rộng quy mô để làm vài trăm hình ảnh. Tôi đang cố gắng đọc trong một thư mục thay vì các hình ảnh riêng lẻ và lưu các hình ảnh mới trong một thư mục mới. Hình ảnh ban đầu sẽ thay đổi từ .jpg, .png, .tif, v.v. Nhưng tôi muốn làm cho tất cả các hình ảnh đầu ra như.
import os
from PIL import Image
filename = "filename.jpg"
size = 250, 250
file_parts = os.path.splitext[filename]
outfile = file_parts[0] + '_250x250' + file_parts[1]
try:
img = Image.open[filename]
img = img.resize[size, Image.ANTIALIAS]
img.save[outfile, 'PNG']
except IOError as e:
print["An exception occured '%s'" %e]
Bất kỳ sự giúp đỡ với vấn đề này được đánh giá cao.
Đã hỏi ngày 6 tháng 3 năm 2019 lúc 17:54Mar 6, 2019 at 17:54
2
Giả sử giải pháp bạn đang tìm kiếm là xử lý nhiều hình ảnh cùng một lúc - đây là một giải pháp. Xem ở đây để biết thêm.
from multiprocessing import Pool
def handle_image[image_file]:
print[image_file]
#TODO implement the image manipulation here
if __name__ == '__main__':
p = Pool[5] # 5 as an example
# assuming you know how to prepare image file list
print[p.map[handle_image, ['a.jpg', 'b.jpg', 'c.png']]]
Đã trả lời ngày 6 tháng 3 năm 2019 lúc 18:05Mar 6, 2019 at 18:05
Baldermanbalermanbalderman
21.7K6 Huy hiệu vàng31 Huy hiệu bạc46 Huy hiệu đồng6 gold badges31 silver badges46 bronze badges
Bạn có thể sử dụng điều này:
#!/usr/bin/python
from PIL import Image
import os, sys
path = "\\path\\to\\files\\"
dirs = os.listdir[ path ]
def resize[]:
for item in dirs:
if os.path.isfile[path+item]:
im = Image.open[path+item]
f, e = os.path.splitext[path+item]
imResize = im.resize[[200,100], Image.ANTIALIAS]
imResize.save[f+'.png', 'png', quality=80]
resize[]
Đã trả lời ngày 6 tháng 3 năm 2019 lúc 18:11Mar 6, 2019 at 18:11
Aaron Pereiraaaron PereiraAaron Pereira
1641 Huy hiệu vàng1 Huy hiệu bạc9 Huy hiệu đồng1 gold badge1 silver badge9 bronze badges
0
Bạn có thể lặp lại nội dung của một thư mục với
import os
for root, subdirs, files in os.walk[MY_DIRECTORY]:
for f in files:
if f.endswith['png']:
#do something
Đã trả lời ngày 6 tháng 3 năm 2019 lúc 18:01Mar 6, 2019 at 18:01
MitchmitchMitch
3.2061 Huy hiệu vàng19 Huy hiệu bạc 30 Huy hiệu Đồng1 gold badge19 silver badges30 bronze badges
Bạn có thể chạy qua tất cả các hình ảnh bên trong thư mục bằng glob
. Và sau đó thay đổi kích thước hình ảnh với opencv
như sau hoặc như bạn đã làm với
from multiprocessing import Pool
def handle_image[image_file]:
print[image_file]
#TODO implement the image manipulation here
if __name__ == '__main__':
p = Pool[5] # 5 as an example
# assuming you know how to prepare image file list
print[p.map[handle_image, ['a.jpg', 'b.jpg', 'c.png']]]
0.import glob
import cv2
import numpy as np
IMG_DIR='home/xx/imgs'
def read_images[directory]:
for img in glob.glob[directory+"/*.png"]:
image = cv2.imread[img]
resized_img = cv2.resize[image/255.0 , [250 , 250]]
yield resized_img
resized_imgs = np.array[list[read_images[IMG_DIR]]]
Đã trả lời ngày 6 tháng 3 năm 2019 lúc 18:02Mar 6, 2019 at 18:02
Achintha ihalageachintha ihalageAchintha Ihalage
2.0864 Huy hiệu vàng16 Huy hiệu bạc 30 Huy hiệu Đồng4 gold badges16 silver badges30 bronze badges
Tôi đã sử dụng:
from PIL import Image
import os, sys
path = os.path.dirname[os.path.abspath[__file__]]
dirs = os.listdir[ path ]
final_size = 244
print[dirs]
def resize_aspect_fit[]:
for item in dirs:
if ".PNG" in item:
print[item]
im = Image.open[path+"\\"+item]
f, e = os.path.splitext[path+"\\"+item]
size = im.size
print[size]
ratio = float[final_size] / max[size]
new_image_size = tuple[[int[x*ratio] for x in size]]
im = im.resize[new_image_size, Image.ANTIALIAS]
new_im = Image.new["RGB", [final_size, final_size]]
new_im.paste[im, [[final_size-new_image_size[0]]//2, [final_size-new_image_size[1]]//2]]
print[f]
new_im.save[f + 'resized.jpg', 'JPEG', quality=400]# png
resize_aspect_fit[]
Đã trả lời ngày 9 tháng 7 năm 2019 lúc 8:15Jul 9, 2019 at 8:15
sqp_125sqp_125sqp_125
5186 Huy hiệu bạc20 Huy hiệu Đồng6 silver badges20 bronze badges
Bạn có thể sử dụng mã này để thay đổi kích thước nhiều hình ảnh và lưu chúng sau khi chuyển đổi trong cùng một thư mục để nói kích thước của [200.200]:
import os
from PIL import Image
f = r' ' #Enter the location of your Image Folder
new_d = 200
for file in os.listdir[f]:
f_img = f+'/'+file
try:
img = Image.open[f_img]
img = img.resize[[new_d, new_d]]
img.save[f_img]
except IOError:
pass
Đã trả lời ngày 22 tháng 7 năm 2020 lúc 1:53Jul 22, 2020 at 1:53
0
Bạn có thể cố gắng sử dụng thư viện PIL để thay đổi kích thước hình ảnh trong Python
import PIL
import os
import os.path
from PIL import Image
path = r'your images path here'
for file in os.listdir[path]:
f_img = path+"/"+file
img = Image.open[f_img]
img = img.resize[[100, 100]] #[width, height]
img.save[f_img]
Đã trả lời ngày 24 tháng 11 năm 2020 lúc 23:18Nov 24, 2020 at 23:18
1