Saya ingin menyimpan beberapa file dalam subdirektori dari direktori saat ini, tetapi untuk alasan apa pun, meskipun Python "berhasil" menyimpan file keluaran, direktori tersebut tidak muncul di mana pun.
com_path = './'
out_f = "output"
crop_f = "1-cropped"
(…)
curr_path = os.path.join(com_path, out_f, crop_f)
for elem in images:
img = img_trim(elem['img'])
filename = curr_path + 'p_%(p_num)s, (%(orig_name)s)%(ext)s' % elem
cv2.imwrite(filename, img)
print(curr_path)
>>> ./output\1-cropped
print(com_path)
>>> ./
Anehnya, saat menggunakan (awalnya saya menulis di sini curr_path alih-alih com_path, yang merupakan kesalahan):
filename = com_path + 'p_%(p_num)s, (%(orig_name)s)%(ext)s' % elem
Semuanya berfungsi dengan baik dan menyimpan file yang diinginkan di folder skrip .py.
Dari apa yang saya kumpulkan dari thread lain dan dokumentasi resmi, ini seharusnya berhasil—mengapa tidak?
EDIT: sesuai permintaan:
print(os.getcwd())
>>> C:\Users\iyoossaev\Desktop\Index Cards\tester
di mana seharusnya
print(filename)
>>> ./p_71, (p0089).png
>>> ./p_72, (p0090).png
>>> ./p_73, (p0091).png
>>> ./p_74, (p0092).png
File tidak kosong, ketika saya menggunakan "com_path" semuanya berfungsi (untuk memuat dan menyimpan) file dihasilkan seperti yang diharapkan. Mengubah direktori penyimpanan akan mengacaukan segalanya (tanpa mengubah direktori pemuatan).
EDIT 2: Saya memutuskan untuk menempelkan seluruh kode hanya untuk memastikan. Program ini dimaksudkan untuk memuat gambar, mengonversinya menjadi Hitam & Putih, menemukan relevansi teks menggunakan rata-rata piksel dalam baris/kolom dan memangkasnya, lalu menyimpan hasilnya dengan nama yang dimodifikasi. Semuanya berfungsi kecuali ketika saya mencoba memasukkannya ke dalam subfolder. Contoh gambar untuk diuji: https://imgur.com/X2mPZr0
# IndexCardSplitter
import cv2 # biblioteka do obróbki
import os # operating system-specific
import re # RegEx
import numpy # obliczenia matematyczne
p_num_off = -18
t_thresh_hor = 210.0
t_thresh_ver = 240.0
t_thresh_m = 25
com_path = os.getcwd()
# com_path = '.'
filenames = os.listdir(com_path)
filenames = [ f for f in filenames if os.path.isfile(os.path.join(com_path, f)) and re.match('[^\_]*\.png$', f) ]
out_f = "output"
crop_f = "1-cropped"
col_f = "2-columns"
def_f = "3-definitions"
def name_mod(filename):
elements = re.match("(p0{1,}([1-9][^\.]*?))(\.....?$)", filename)
orig_name = elements.group(1)
p_num = str(int(elements.group(2)) + p_num_off)
ext = elements.group(3)
return{'orig_name':orig_name, 'p_num':p_num, 'ext':ext}
def load_images(filenames):
images = []
for f in filenames:
print(f)
img_t = cv2.imread(os.path.join(com_path,f), cv2.IMREAD_GRAYSCALE)
thresh, img_t = cv2.threshold(img_t, 128, 255, cv2.THRESH_OTSU)
dictionary = name_mod(f)
dictionary['img'] = img_t
images.append(dictionary)
return images
def img_trim(image):
height, width = image.shape
height = height - 1
width = width - 1
top_trim = 0
bot_trim = height
left_trim = 0
right_trim = width
i = 0 # GÓRA
while i < height and top_trim == 0:
row = image[i, 0:-1]
if numpy.mean(row) < t_thresh_hor:
top_trim = i
i = i + 1
i = height # DÓŁ
while i > 0 and bot_trim == height:
row = image[i, 0:-1]
if numpy.mean(row) < t_thresh_hor:
bot_trim = i
i = i - 1
i = 0 # LEWO
while i < width and left_trim == 0:
col = image[0:-1, i]
if numpy.mean(col) < t_thresh_ver:
left_trim = i
i = i + 1
i = width # PRAWO
while i > 0 and right_trim == width:
col = image[0:-1, i]
# col = image[0:-1, 2700]
if numpy.mean(col) < t_thresh_ver:
right_trim = i
i = i - 1
top_trim = top_trim - t_thresh_m
bot_trim = bot_trim + t_thresh_m
left_trim = left_trim - t_thresh_m
right_trim = right_trim + t_thresh_m
image = image[top_trim:bot_trim, left_trim:right_trim]
return(image)
print('*'*40)
# curr_path = os.path.join(os.getcwd(), out_f, crop_f)
# print(curr_path)
print(com_path)
for elem in images:
img = img_trim(elem['img'])
# filename = os.path.join(os.getcwd(), out_f, crop_f, 'p_%(p_num)s, (%(orig_name)s)%(ext)s' % elem)
filename = com_path + 'p_%(p_num)s, (%(orig_name)s)%(ext)s' % elem
print(filename)
cv2.imwrite(filename, img)
Nama file masukan adalah: p0089.png, p0090.png
dll.
images
adalah daftar kosong? Masukkanprint(filename)
di lingkaran Anda. Atau mungkin direktori kerja Anda saat ini tidak sesuai dengan harapan Anda? Letakkanprint(os.getcwd())
di suatu tempat. Jika tidak, harap edit pertanyaan Anda untuk menyertakan program singkat, lengkap yang menunjukkan masalahnya. Lihat contoh minimal yang dapat direproduksi untuk info lebih lanjut. - person Robᵩ   schedule 15.02.2017filename = os.path.join(curr_path, 'p_%(p_num)s, ...'%elem)
? - person Aran-Fey   schedule 15.02.2017com_path = './'
dengancom_path = 'os.getcwd()'
? Jika tidak, Anda ingin yakin dengan keputusan './'! - person Son of a Beach   schedule 15.02.2017