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

这是一个图片分类的简单应用,没有加入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



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

猜你喜欢

转载自blog.csdn.net/u010676526/article/details/80089076