OpenCVで画像変換(エンボス変換)後の保存方法について質問させてください。
フォルダを選択し、全写真をすべて加工して保存するというコードを書いています。
コード自体にエラーは生じていません。
困っていること
・cv2.imshowではエンボス変換した画像が表示されるが
cv.imwriteでは真っ黒の画像が保存される
考えられること
・numpy配列で画像処理をしたためかと思っています。
が、解決法がわからないです。
ご教示お願いいたします。
python
1 2#変数の作成とセット 3today = datetime.date.today().strftime('%Y%m%d') 4arr = [] 5 6def pass_set(mode): 7 org_dir = e1.get() 8 9 if mode == 'emb': 10 fld_dir = org_dir + '\emboss\' 11 12 os.makedirs(fld_dir, exist_ok=True) 13 14 #フォルダ内の画像をリスト化 15 arr.extend(glob.glob(org_dir + "/*.png")) 16 return org_dir,fld_dir 17 18def open_folder(): 19 org_dir = e1.get() 20 if org_dir is None: 21 folder_path = 'C:' 22 23 else: 24 folder_path = org_dir 25 26 folder_path = tk.filedialog.askdirectory(initialdir = folder_path) 27 e1.insert(tk.END,folder_path) 28 29def emboss(): 30 org_dir,fld_dir = pass_set('emb') 31 label=label9 32 def invert(pixel): 33 return 1 - pixel 34 for i in arr: 35 img=cv2.imread(i,0) 36 img = img / 255 37 img = np.array([invert(a) for a in img]) 38 dx = e8.get() 39 dy = e9.get() 40 M = np.float32([[1,0,dx],[0,1,dy]]) 41 rownum,colnum = img.shape[:2] 42 img2 = cv2.warpAffine(img, M,(colnum,rownum)) 43 add = img + img2 44 emboss = add - 1/2 45 img_emboss = emboss.clip(0,1) 46 filename=os.path.basename(i) 47 cv2.imshow("emboss",img_emboss) 48 cv2.waitKey() 49 cv2.destroyAllWindows() 50 cv2.imwrite(org_dir+'/emboss'+'/emboss'+filename,img_emboss) 51 52win=tk.Tk() 53win.title("画像変換") 54win.minsize(400,400) 55 56#入力boxの生成 57 58e8=tk.Entry(win,width=30) 59e8.place(x=125,y=240) 60e9=tk.Entry(win,width=30) 61e9.place(x=125,y=290) 62 63 64#ラベルの生成 65 66label8=tk.Label(win,text="エンボス効果(x)\n(-3- 3)",bg="white") 67label8.place(x=5,y=240) 68label9=tk.Label(win,text="エンボス効果(y)\n(-3- 3)",bg="white") 69label9.place(x=5,y=290) 70 71#ボタンの作成 72 73btn8=tk.Button(win,text="実行",command=lambda:emboss()) 74btn8.place(x=325,y=290) 75win.mainloop() 76 77
回答1件
あなたの回答
tips
プレビュー