多組相同背景圖片分類和背景提取
阿新 • • 發佈:2021-10-21
背景分類
from PIL import Image import os import shutil file_dir = 'C:/Users/10767/Desktop/SortCapcha/Necaptcha' new_dir = 'C:/Users/10767/Desktop/SortCapcha/Sort' image_filenames = [os.path.join(file_dir, x) for x in os.listdir(file_dir)] #get all url lenth = len(image_filenames) def SortCapcha(k): #start with pic[0], compare all, move to k sorted_dir = new_dir + str(k) os.mkdir(sorted_dir) imagine = Image.open(image_filenames[0]) imagine.show() width, height = imagine.size listR = [] listG = [] listB = [] for x in range(width): for y in range(height): r, g, b = imagine.getpixel((x, y)) listR.append(r) listG.append(g) listB.append(b) for i in range(1, lenth): comImagine = Image.open(image_filenames[i]) comWidth, comHeight = comImagine.size if(comWidth != width or comHeight != height): continue comListR = [] comListG = [] comListB = [] for x in range(width): for y in range(height): r, g, b = comImagine.getpixel((x, y)) comListR.append(r) comListG.append(g) comListB.append(b) cnt = 0 pickNum = 0 for x in range(0, width * height, 5): pickNum += 1 if abs(listR[x] - comListR[x]) <= 10 and abs(listG[x] - comListG[x]) <= 10 and abs(listB[x] - comListB[x]) <= 10: cnt += 1 #print(cnt / pickNum) if cnt / pickNum > 0.6: shutil.move(image_filenames[i], sorted_dir) #comImagine.show() #print(cnt / pickNum) shutil.move(image_filenames[0], sorted_dir) runTimes = 0 while lenth > 0: runTimes += 1 SortCapcha(runTimes) image_filenames = [os.path.join(file_dir, x) for x in os.listdir(file_dir)] # get all url lenth = len(image_filenames)
背景提取
from PIL import Image import os def GetBackground(file_dir, output_dir, k): image_filenames = [os.path.join(file_dir, x) for x in os.listdir(file_dir)] # get all url lenth = len(image_filenames) imagine = Image.open(image_filenames[0]) width, height = imagine.size # print("done") listR = [[0] * width * height for i in range(lenth)] # create list for data listG = [[0] * width * height for i in range(lenth)] listB = [[0] * width * height for i in range(lenth)] R = [0] * width * height # ans B = [0] * width * height G = [0] * width * height for i in range(lenth): imagine = Image.open(image_filenames[i]) for x in range(width): for y in range(height): r, g, b = imagine.getpixel((x, y)) listR[i][x * height + y] = r listB[i][x * height + y] = b listG[i][x * height + y] = g for x in range(width): for y in range(height): backetR = [0] * 256 # backet sort backetG = [0] * 256 backetB = [0] * 256 for i in range(lenth): backetR[listR[i][x * height + y]] += 1 backetG[listG[i][x * height + y]] += 1 backetB[listB[i][x * height + y]] += 1 # print(backetR[listR[i][x * height + y]]) maxNumR = -1 maxNumG = -1 maxNumB = -1 for i in range(256): # print(i, backetR[i]) if backetR[i] > maxNumR: R[x * height + y] = i maxNumR = backetR[i] # print(backetR[i], maxNumR) if backetG[i] > maxNumG: G[x * height + y] = i maxNumG = backetG[i] if backetB[i] > maxNumB: B[x * height + y] = i maxNumB = backetB[i] # print(R[x * height + y], G[x * height + y], B[x * height + y]) newImagine = Image.new("RGB", (width, height)) for x in range(width): for y in range(height): # print(R[x * height + y], G[x * height + y], B[x * height + y]) newImagine.putpixel((x, y), (R[x * height + y], G[x * height + y], B[x * height + y])) # newImagine.show() newImagine.save(output_dir + '/output' + str(k) + '.jpg') sourse_dir = 'C:/Users/10767/Desktop/SortCapcha' save_dir = 'C:/Users/10767/Desktop/SortCapcha/Output' for i in range(51): GetBackground(sourse_dir + '/Sort' + str(i), save_dir, i)