Pythonモザイク切り抜き2

Last-modified: 2024-01-24 (水) 15:11:56

用意する物
Python
Anaconda

環境
Anaconda
Jupyter Notebook
Python

以下のサイト様を参考にしました。
https://qiita.com/summer4an/items/306acc5d38169f880ba8

以下のプログラムは、同人誌等のモザイクの場所を塗り替え、切り取り、貼り付ける、未完成のプログラム。
二つに分ける。このプログラムが二番目。
下のプログラムは、モザイクの場所を検出し、塗り替え、透過して、画像の上に貼り付けるプログラム。
二回起動する必要がある。
画像フォルダのパスは変更可能。
下のプログラムをJupyter Notebookに貼り付けて起動。

from PIL import Image
import cv2
import numpy as np
import pathlib
import glob
import os

import sys
args = sys.argv

if len(args) != 2:

   print("too few argument.")
   #sys.exit(1)

#対象フォルダ
input_dir = r"C:\Users\user\Desktop\jpd"

保存するファルダ

output_dir = r"C:\Users\user\Desktop\jpdsave"

保存するファルダのファイル一覧

output_dir2 = glob.glob(r"C:\Users\user\Desktop\jpdsave/*.png")
#英語のフォルダ
engput_dir = r"C:\Users\user\Desktop\engd"
#フォルダ内に保存されているファイル一覧
image_list = glob.glob(r"C:\Users\user\Desktop\jpd/*.png")
#英語フォルダ内に保存されているファイル一覧
image_listen = glob.glob(r"C:\Users\user\Desktop\engd/*.png")
#英語と日本語を合わせた画像
image_EnJp = r"C:\Users\user\Desktop\EnandJp"

if not os.path.exists(output_dir):

   os.mkdir(output_dir)

#if

   #os.mkdir(output_dir2)

#img_rgb

#dst

#img_gray

#img_gray

#img_gray

#img_gray

#cv2

for t in range(len(image_list)):

   img_rgb = cv2.imread(image_list[t])
   dst = cv2.cvtColor(img_rgb,cv2.COLOR_BGR2BGRA)
   img_gray = cv2.cvtColor(img_rgb,cv2.COLOR_BGR2GRAY)
   img_gray = cv2.Canny(img_gray,10,20)
   img_gray = 255-img_gray
   img_gray = cv2.GaussianBlur(img_gray,(3,3),0)
   #img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) #グレースケールに
   #img_gray = cv2.Canny(img_gray,10,20) #エッジ検出
   #img_gray = 255-img_gray #白黒反転
   #img_gray = cv2.GaussianBlur(img_gray,(3,3),0)
   for i in range(10,20+1):
           pattern_filename = "pattern"+str(i)+"x"+str(i)+".png"
           template = cv2.imread(pattern_filename, 0)
           w, h = template.shape[::-1]
           img_kensyutu_kekka = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)
           threshold = 0.3
           loc = np.where(img_kensyutu_kekka >= threshold)
           for pt in zip(*loc[::-1]):
               cv2.rectangle(dst, pt, (pt[0] + w, pt[1] + h), (0,0,255), -1)
   #cv2.imwrite(str(t)+'.png',dst)
   cv2.imwrite(os.path.join(output_dir,str(t)+'.png'),dst)

#フォルダ名を日本語やカタカナにするとエラー、ファイル名はそろえる
for q in range(len(image_listen)):

   base_path = Image.open(image_listen[q])
   logo_path = Image.open(output_dir2[q])
   cop_base_path = base_path.copy()
   cop_base_path.paste(logo_path,(0,0),logo_path)
   #cop_base_path.save('output'+str(q)+'.png')
   cop_base_path.save(os.path.join(image_EnJp,'output'+str(q)+'.png'))
   #base_path.paste(logo_path,(0,0),logo_path)
   #base_path.save(os.path.join(image_EnJp,'output'+str(q)+'.png'))

#base_path

#logo_path

#out_path

#base

#logo

#base

#base

#for

   #base_path = cv2.imread(image_listen[y])
   #dst2 = cv2.cvtColor(base_path,cv2.COLOR_BGR2BGRA)
   #for b in range(len(output_dir2)):
       #logo_path = cv2.imread(output_dir2[y])
   #gousei = cv2.addWeighted(base_path,alpha,logo_path,alpha,0)
   #cv2.imwrite(os.path.join(image_EnJp,str(y)+'.png'),gousei)

#cv2

#cv2

#cv2
cv2.imshow('window1', dst)
cv2.imshow('window2', img_gray)
cv2.waitKey(0)

cv2.destroyAllWindows()