python 事始め (7) 画像の回転 第3弾

ちょっと時間がかかりましたが,回転の部分を組み込みました。

下記がプログラム,全文です。

 ライブラリのインポート
import cv2
import tkinter as tk
from PIL import Image, ImageTk
import os
import matplotlib.pyplot as plt
import numpy as np

# ファイル名を配列に格納
file_names = ['00.jpg', '01.jpg', '02.jpg','03.jpg','04.jpg','05.jpg','06.jpg','07.jpg','08.jpg','09.jpg','10.jpg',\
		'11.jpg','12.jpg','13.jpg','14.jpg','15.jpg','16.jpg','17.jpg','18.jpg','19.jpg','20.jpg','21.jpg',\
		'22.jpg','23.jpg','24.jpg','25.jpg','26.jpg','27.jpg','28.jpg','29.jpg','30.jpg','31.jpg','32.jpg',\
		'33.jpg','34.jpg','35.jpg','36.jpg','37.jpg','38.jpg','39.jpg','40.jpg','41.jpg','42.jpg','43.jpg',\
		'44.jpg','45.jpg','46.jpg','47.jpg','48.jpg','49.jpg','50.jpg','51.jpg','52.jpg','53.jpg','54.jpg',\
		'55.jpg','56.jpg','57.jpg','58.jpg','59.jpg','60.jpg','61.jpg','62.jpg','63.jpg','64.jpg','65.jpg']
file_names1 = [ '0.jpg', '1.jpg', '2.jpg','3.jpg','4.jpg','5.jpg','6.jpg','7.jpg','8.jpg','9.jpg','10.jpg',\
		'11.jpg','12.jpg','13.jpg','14.jpg','15.jpg','16.jpg','17.jpg','18.jpg','19.jpg','20.jpg','21.jpg',\
		'22.jpg','23.jpg','24.jpg','25.jpg','26.jpg','27.jpg','28.jpg','29.jpg','30.jpg','31.jpg','32.jpg',\
		'33.jpg','34.jpg','35.jpg','36.jpg','37.jpg','38.jpg','39.jpg','40.jpg','41.jpg','42.jpg','43.jpg',\
		'44.jpg','45.jpg','46.jpg','47.jpg','48.jpg','49.jpg','50.jpg','51.jpg','52.jpg','53.jpg','54.jpg',\
		'55.jpg','56.jpg','57.jpg','58.jpg','59.jpg','60.jpg']

#グローバル変数の定期
img=file_names[0]
kaisu=0
kaisu1=0
imagetk_list = list()

# ベースパスを設定
base_path = 'E:/python-kaihatu/nanikana/mask-jp'
base_path1 = 'E:/python-kaihatu/nanikana/mask-r1'

# tkオブジェクトの作成
root = tk.Tk()
root.title("なにかな") #ウィンドウのタイトルを設定
root.geometry("700x570") #ウィンドウのサイズを設定

### キャンバス作成
canvas=tk.Canvas(root,width=550, height=550)
canvas.place(x = 10,y = 10)

#背景画像を読み込み
img1 = cv2.imread('E:/python-kaihatu/nanikana/gazou/buta1.jpg')

def gazou_over():
	global kaisu

	# フルパスを作成
	full_path = os.path.join(base_path, file_names[kaisu])

	# マスクファイルを開く
	mask = cv2.imread(full_path)

	if mask is not None:
		#画像の合成
		result = cv2.bitwise_and(mask,img1)
		#BRG読み込みをRGBに変換
		result = cv2.cvtColor(result, cv2.COLOR_BGR2RGB)
		#フォーマットをPILに変換
		result = Image.fromarray(result)
	return result

def kaiten():
	global result1,mask
	# フルパスを作成
	full_path1 = os.path.join(base_path1, file_names1[kaisu1])

	# マスクファイルを開く
	mask = cv2.imread(full_path1)
	
	#画像の合成
	result1 = cv2.bitwise_and(mask,img1)

	#cv2.imshow('test', result)

	#BRG読み込みをRGBに変換
	result1= cv2.cvtColor(result1, cv2.COLOR_BGR2RGB)

	#フォーマットをPILに変換
	result1 = Image.fromarray(result1)
	
	#TkinterのPhotoImageに変換
	result1=ImageTk.PhotoImage(result1)

	canvas.create_image(273,273,image = result1,tag='p1')

def on_button_click():
	global kaisu,imagetk_list
	if  kaisu<65:
		kaisu= kaisu+1

		#旧画像の削除
		canvas.delete('p1')

		result= gazou_over()
		result=ImageTk.PhotoImage(result)
		imagetk_list.append(result)
		canvas.create_image(273,273,image = result,tag='p1')

def on_button1_click():
	global kaisu,imagetk_list
	if  kaisu>0:
		kaisu= kaisu-1

		#旧画像の削除
		canvas.delete('p1')

		result= gazou_over()
		result=ImageTk.PhotoImage(result)
		imagetk_list.append(result)
		canvas.create_image(273,273,image = result,tag='p1')

def on_button2_click():
	global kaisu1,imagetk_list
	if kaisu1<60:
		kaisu1=kaisu1+1
		kaiten()


		#imagetk_list.append(result1)
		#canvas.create_image(273,273,image = result1,tag='p1')

def on_button3_click():
	global kaisu1,imagetk_list
	if kaisu1>0:
		kaisu1=kaisu1-1
		kaiten()

#PILでjpgを使用
img_pil=gazou_over()
img_pil=ImageTk.PhotoImage(img_pil)
#画像ファイルをキャンバスの(0,0)に合わせて表示してみる
canvas.create_image(273,273,image = img_pil,tag='p1')

# ウィジェットの配置や、イベント処理などを記述
button = tk.Button(root, text="開く", command=on_button_click, bg="cyan4", fg="white",width=8, height=1)
button.place(x=595, y=30)
button1 = tk.Button(root, text="閉じる", command=on_button1_click, bg="cyan4", fg="white",width=8, height=1)
button1.place(x=595, y=100)
button2 = tk.Button(root, text="回転", command=on_button2_click, bg="cyan4", fg="white",width=8, height=1)
button2.place(x=595, y=170)
button3 = tk.Button(root, text="逆回転", command=on_button3_click, bg="cyan4", fg="white",width=8, height=1)
button3.place(x=595, y=200)

# メインループの実行
root.mainloop()

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA