这是一个图片分类的简单应用,没有加入cnn之类的深度学习算法.大致算法如下:
计算机视觉 (四) --白天不懂夜的黑

首先 我们先建立一个工具类用于读取图片和归一化图片.
import cv2
import os
'''
resize 图片
'''
def standartize_input(img):
    return cv2.resize(img,(244,224))
'''
编辑标签
'''
def encode(label):
numerical_val =0
    if label == 'day':
        numerical_val = 1
    return numerical_val
'''
归一化图片
'''
def standartize(imglist):
    standard_list = []
    for item in imglist:
        img = item[0]
        lab = item[1]
        std_img = standartize_input(img)
        binary_lab = encode(lab)
        standard_list.append((std_img,binary_lab))
    return standard_list
def load_dataSet(dir,colortype="RGB"):
    img_dateSet = []
    for i in os.listdir(dir):
        path = dir +"/"+i
        lable = "night"
        img = cv2.imread(path)
        if(colortype == 'RGB'):
            img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
        elif(colortype == 'HSV'):
            img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)           
        if path.__contains__("day"):
            lable = "day"
        img_dateSet.append((img,lable))
    return img_dateSet 

接下来我们来测试下:

import imgHelp as help
import matplotlib.pyplot as plt
import numpy as np
'''
# 平均亮度
'''
def avg_brightness(img):
v_img = img[:,:,2]
sum_brightness = np.sum(v_img)
return sum_brightness/(v_img.shape[0]*v_img.shape[1])
'''
# 评估标签
'''
def estimate_label(img):
avg = avg_brightness(img)
threhold = 110 # 设置明暗范围
predict_label = 1
if(avg<threhold):
predict_label = 0
return predict_label
'''
# 收集错误分类
'''
def misclassified_images(test_imges):
misclassified_images = []
for img in test_imges:
current_img = img[0]
true_lab = img[1]
pre_lab = estimate_label(current_img)
if(true_lab!=pre_lab):
misclassified_images.append((current_img,true_lab,pre_lab))
return misclassified_images
img_train_dataSet = help.load_dataSet("./day","HSV") + help.load_dataSet("./night","HSV")
img_test_dataSet = help.load_dataSet("./test","HSV")
stded_train_img_dataSet = help.standartize(img_train_dataSet)
stded_test_img_dataSet = help.standartize(img_test_dataSet)

misclassified_images=misclassified_images(stded_test_img_dataSet)

print("准确率:",1-(len(misclassified_images)/len(img_test_dataSet)))
#print(estimate_label(stded_test_img_dataSet[1][0]))
#print(stded_img_dataSet[0][1])
plt.imshow(misclassified_images[0][0])
#print(stded_test_img_dataSet[1][1])
#print(misclassified_images[1][2])
#print(estimate_label(stded_img_dataSet[11][0]))
plt.show()

准确率: 0.9166666666666666

计算机视觉 (四) --白天不懂夜的黑


由于我们没有使别的特征,这个结果还是可以的接受的.主要是对白天大片阴影和晚上有大量亮斑的地方识别不准.

相关文章: