import os
from PILimport *
from PILimport Image
import numpyas np
from svmutilimport *
from svmimport *
address ='D:\\11\\fen\\'
f = open('D:\\11\\train.txt','w')
def get_feature(dir, file):
f.write(dir)
im = Image.open(address + dir +'\\' + file)
imarr = np.array(im)
height, width = imarr.shape
for iin range(height):
for jin range(width):
gray = imarr[i,j]
if gray <=150:
imarr[i, j] =0
else:
imarr[i, j] =255
im = Image.fromarray(imarr)
count =0
width, height = im.size
for iin range(height):
c =0
for jin range(width):
if im.getpixel((j, i)) ==0: c +=1
f.write(' %d:%d'%(count, c))
count +=1
for iin range(width):
c =0
for jin range(height):
if im.getpixel((i, j)) ==0: c +=1
f.write(' %d:%d'%(count, c))
count +=1
f.write('\n')
def train_svm_model():
y, x = svm_read_problem('D:\\11\\train.txt')
model = svm_train(y, x)
svm_save_model('D:\\11\\model_file', model)
if __name__ =='__main__':
dirs = os.listdir(address)
for dirin dirs:
files = os.listdir(address + dir)
for filein files:
get_feature(dir, file)
train_svm_model()
分割图片
import os
from PILimport *
from PILimport Image
import numpyas np
from svmutilimport *
from svmimport *
import cv2
address ='D:\\11\yanzheng\\'
f = open('train.txt','w')
imgry = Image.open("D:\\11\\yanzheng\\0.jpg")
imgry = imgry.convert('L')
imgry = np.array(imgry)#将图像转化为数组
height, width = imgry.shape
def get_feature():
dir=""
im = Image.open("D:\\11\\yanzheng\\1.jpg")
imarr = np.array(im)
height, width ,a= imarr.shape
for iin range(height):
for jin range(width):
gray = imarr[i,j]
if gray[0] <=150|gray[1] <=150|gray[2] <=150:
imarr[i, j][0] =0
imarr[i, j][1] =0
imarr[i, j][2] =0
else:
imarr[i, j][0] =255
imarr[i, j][1] =255
imarr[i, j][2] =255
im = Image.fromarray(imarr)
count =0
width, height = im.size
for iin range(height):
c =0
for jin range(width):
if im.getpixel((j, i)) ==0: c +=1
f.write(' %d:%d'%(count, c))
count +=1
for iin range(width):
c =0
for jin range(height):
if im.getpixel((i, j)) ==0: c +=1
f.write(' %d:%d'%(count, c))
count +=1
f.write('\n')
def train_svm_model():
y, x = svm_read_problem('train.txt')
model = svm_train(y, x)
svm_save_model('model_file', model)
def binarization(im):#二值化
f = open('D:\\11\\yanzheng\\s.txt','w')
f.write("1")
for iin range(height):
for jin range(width):
gray = imgry[i,j]
print(gray)
if gray <=220:#阈值设为220
imgry[i, j] =0
else:
imgry[i, j] =1
f.write(str(imgry[i,j]))#输出到txt查看
f.write('\n')
'''
plt.figure('')
plt.imshow(imgry, cmap='gray')
plt.axis('off')
plt.show()
'''
return imgry
def noiseReduction(imgry):#去除噪点
global dx, dy
dx=(1,2,3,4,5,6,7,8)
dy=(1,2,3,4,5,6,7,8)
for iin range(height):
for jin range(width):
cnt =0
if imgry[i, j] ==1:#白点不用管
continue
else:
for kin range(8):
x = dx[k] + i
y = dy[k] + j
if x <0 or x >= heightor y <0 or y >= width:
continue
if imgry[x, y] ==0:
cnt +=1
if cnt <4:#周围少于4点就算噪点
imgry[i, j] =1
return imgry
def cutImg(img):#图像切割
s =12
w =40
h =81
t =0
cut_img = []
for iin range(4):
pic = img.crop((s + w * i, t, s + w * (i +1), h))
cut_img.append(pic)
'''
cut_img[0].show()
cut_img[1].show()
cut_img[2].show()
cut_img[3].show()
'''
return cut_img
if __name__ =='__main__':
imgry1=binarization(imgry)
imgry2=noiseReduction(imgry1)
f = open('D:\\11\\yanzheng\\d.txt','w')
for iin range(height):
for jin range(width):
f.write(str(imgry2[i, j]))# 输出到txt查看
f.write('\n')
# imgry2 = Image.fromarray(imgry2)
imgry2 = Image.fromarray(imgry2.astype('uint8')).convert('RGB')
imgry2.show()
imgry3 = []
imgry3=cutImg(imgry2)
print(imgry3)
imgry3[0].save("D:\\11\\yanzheng\\1.jpg")
imgry3[1].save("D:\\11\\yanzheng\\2.jpg")
imgry3[2].save("D:\\11\\yanzheng\\3.jpg")
imgry3[3].save("D:\\11\\yanzheng\\4.jpg")
train_svm_model()
网友评论