离散大创项目——图片识别笔记
1.我才知道a=input()读入的竟然是字符串。。。还要强制转化成int型,这玩意搞了我好久
2.对照片进行裁剪,将照片周围多余的白色部分去除(也就是让图像尽可能撑满整个框)
由上一张裁成下一张
from PIL import Image
import os
SCALE = 1
#等比例缩放
def get_char(pixel, blank_char='0', fill_char='1'):
return blank_char if pixel == 0 else fill_char
def shang():
for i in range(width):
for j in range(height):
if im.getpixel((i, j)) == 0:
return i
def xia():
for i in reversed(range(width)):
for j in range(height):
if im.getpixel((i,j)) == 0:
return i
def zuo():
for i in range(height):
for j in range(width):
if im.getpixel((j, i)) == 0:
return i
def you():
for i in reversed(range(height)):
for j in range(width):
if im.getpixel((j, i)) == 0:
return i
im = Image.open(r"C:\Users\DELL\Desktop\活动\离散大创\新建文件夹\gou.jpg")
size = im.size
#size[0]*size[1] 横宽像素
width, height = int(size[0] * SCALE), int(size[1] * SCALE)
im = im.resize((width, height))
im = im.convert('1')
#print(width,height)
s=shang()
x=xia()
z=zuo()
y=you()
box=(s,z,x,y)
#s z x y
im = im.crop(box)
im.save("C:\\Users\\DELL\\Desktop\\活动\\离散大创\\图像库\\狗.png")
#800 645
#txt = ""
#im1 = Image.open(r"C:\Users\DELL\Desktop\活动\离散大创\新建文件夹\apple.png")
#print(txt)
#f = open(r'gou.txt', 'w')
#print(txt, file=f)
#f.close()
其中的四个函数分别是定位上下左右的坐标,
im.paste(image,box)
将一张图粘贴到另一张图像上。变量box或者是一个给定左上角的2元组,或者是定义了左,上,右和下像素坐标的4元组,或者为空(与(0,0)一样)。如果给定4元组,被粘贴的图像的尺寸必须与区域尺寸一样。
im.crop()函数的参数形式是(x1, y1, x2, y2)这个元组是作为一个参数的
3.`
用以输出路径下的子目录
file_dir = r"C:\Users\DELL\Desktop\活动\离散大创\测试"
for root, dirs, files in os.walk(file_dir):
print(files) #当前路径下所有子目录
打开指定文件夹下的指定文件
img_path = 'C:\\Users\DELL\Desktop\活动\离散大创\图像库\\'
img_list = os.listdir(r'C:\Users\DELL\Desktop\活动\离散大创\图像库')
Ym = Image.open(img_path + img_list[i])
图像识别功能基本上已经实现,但是准确率等有待提高
而且使用优化方面尚且做的不足
from PIL import Image
import os
SCALE = 800#对比参数
#等比例缩放
SUM=6#数据库中数量
def get_char(pixel, blank_char='0', fill_char='1'):
return blank_char if pixel == 0 else fill_char
def shang(width,height):
for i in range(width):
for j in range(height):
if im.getpixel((i, j)) == 0:
return i
def xia(width,height):
for i in reversed(range(width)):
for j in range(height):
if im.getpixel((i,j)) == 0:
return i
def zuo(width,height):
for i in range(height):
for j in range(width):
if im.getpixel((j, i)) == 0:
return i
def you(width,height):
for i in reversed(range(height)):
for j in range(width):
if im.getpixel((j, i)) == 0:
return i
def cmp():
sum=0
for i in range(SCALE):
for j in range(SCALE):
if ng.getpixel((i, j))==Ym.getpixel((i, j))==0:
sum=sum+1
return sum
file_dir = r"C:\Users\DELL\Desktop\活动\离散大创\测试"
for root, dirs, files in os.walk(file_dir):
print(files) #当前路径下所有子目录
img_path = 'C:\\Users\DELL\Desktop\活动\离散大创\测试\\'
img_list = os.listdir(r'C:\Users\DELL\Desktop\活动\离散大创\测试')
a=input("您要测试的照片编号:(从左到右编号从1依次增大)")
a=int(a)-1
im = Image.open(img_path + img_list[a])#读入你要测试的图片编号
size = im.size
#im.show()
#size[0]*size[1] 横宽像素
width, height = int(size[0]), int(size[1])
im = im.resize((width, height))
im = im.convert('1')
#print(width,height)
s=shang(width,height)
x=xia(width,height)
z=zuo(width,height)
y=you(width,height)
box=(s,z,x,y)
#s z x y
ng = im.crop(box)
#ng.save("C:\\Users\\DELL\\Desktop\\活动\\离散大创\\测试\\chuan1.png")
#ng.show()
pos=-1
MAXN=-1
for i in range(SUM):
img_path = 'C:\\Users\DELL\Desktop\活动\离散大创\图像库\\'
img_list = os.listdir(r'C:\Users\DELL\Desktop\活动\离散大创\图像库')
Ym = Image.open(img_path + img_list[i])
Ym.show()
ng = ng.resize((SCALE,SCALE))
Ym = Ym.resize((SCALE,SCALE))
print("相似度为=",cmp())
if i==0 or MAXN<cmp():#保存相似度最大的数据
pos=i
MAXN=cmp()
filedir = r"C:\Users\DELL\Desktop\活动\离散大创\图像库"
for root, dirs, files in os.walk(filedir):
print("相似度最高的是第",pos+1,"个,为数据库中的图片",files[pos])
#800 645
#txt = ""
#im1 = Image.open(r"C:\Users\DELL\Desktop\活动\离散大创\新建文件夹\apple.png")
#print(txt)
#f = open(r'gou.txt', 'w')
#print(txt, file=f)
#f.close()
#561 850 558 472 923 650
#253 372 252 257 85 259
# 417 365 621 476
测试结果