利用SVM分类器批量分类图片颜色信息

本文所使用的SVM分类器,功能主要是来分类和识别图片中的特定颜色特征。我用来提取的是图像的荧光特征区域。在训练前,你首先需要有一张需要训练的图和它对应的标签,训练的图可以是 R G B RGB RGB或者 B M P BMP BMP图像,标签是一张黑白的二值图,形状与前面图片大小对应,白色区域对应你要提取的原图特征区域。
from sklearn import svm
from PIL import Image
import cv2 as cv
import os

since = time.time()  # 时间戳,用来记录时间
image_path = r'图片路径'
label_path = r'标签路径'
image = cv.imread(image_path)
lable1 = cv.imread(label_path)
s = image.shape #获取图片形状信息,一般为(宽,高,3)
s1 = image.reshape(s[0]*s[1],3) #把图片reshape为(像素点数,3)也就是每个像素点rgb值为一行,便于传入分类器训练
lable2 = lable1.flatten() # 把传入的二值图展平成一维作为标签
clf = svm.SVC(gamma='scale') # 开始训练SVM分类器
clf.fit(s1, lable2)
print('训练用时:',time.time()-since) #得到训练分类器所需时间

def clas_data(file_path,save_path): # 批量预测图片
    for fileName in os.listdir(file_path): #获取需要预测图片的文件名
        #if fileName.split("-")[-1] =='2.bmp' or fileName.split("-")[-1] =='2.jpg':
		  since = time.time() 
		  path = os.path.join(file_path, fileName) # 获得图片路径
		  print(fileName)
		  img = cv.imread(path) # 打开图片
		  sp = img.shape # 获取图片形状
		  s1 = img.reshape(sp[0]*sp[1],3) #reshape,作用和前面一样
		  predict1 = clf.predict(s1) # 预测图片
		  a = predict1.reshape(sp[0],sp[1]) # 得到预测结果,转为二值图
		  a = Image.fromarray(a).convert('P') # 此时是pil的‘I’模式,需要转为'P'模式才能显示出来
		  newFileName = fileName[0:fileName.find(".bmp")]+".png" # 命名图像的后缀改为png格式
		  a.putpalette([0,0,0,128,0,0]) # 输出为(0,1)的标签
		  a.save(save_path+"\\"+newFileName) # 保存图片到指定路径
		  print('分类用时:',time.time()-since) # 记录分类时间
            
file_path = r'图片文件夹路径'
save_path = r'保存预测结果路径'
clas_data(file_path,save_path)
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值