您的位置:首页 > 编程语言 > Python开发

python-opencv3 kmeans图像分类

2017-08-25 00:45 190 查看
参考:

异常:

    reshape_feature = des.reshape(-1, 1)

AttributeError: 'tuple' object has no attribute 'reshape'

原因:

错误写法:

des = sift.detectAndCompute(gray, None)  # 检测并计算描述符

正确写法:
Kp,des=sift.detectAndCompute(gray,None)#检测并计算描述符


注意:detect和Compute可以一起写,也可以分开写,


import os, codecs
import cv2
import numpy as np
from sklearn.cluster import KMeans

def get_file_name(path):
'''''
Args: path to list;  Returns: path with filenames
'''
filenames = os.listdir(path)
path_filenames = []
filename_list = []
for file in filenames:
if not file.startswith('.'):
path_filenames.append(os.path.join(path, file))
filename_list.append(file)

return path_filenames

def knn_detect(file_list, cluster_nums, randomState=None):
features = []
files = file_list

sift = cv2.xfeatures2d.SIFT_create()
for file in files:
print(file)
img = cv2.imread(file)
img = cv2.resize(img, (32, 32), interpolation=cv2.INTER_CUBIC)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
print(gray.dtype)
des = sift.detectAndCompute(gray, None)  # 检测并计算描述符
# Kp,des=sift.detectAndCompute(gray,None)#检测并计算描述符
# des =sift.detect(gray, None)# sift.detectAndCompute(gray, None)
# # # 找到后可以计算关键点的描述符
# Kp, des = sift.compute(gray, des)
if des is None:
file_list.remove(file)
continue
reshape_feature = d

http://blog.csdn.net/willduan1/article/details/70335146
异常:

    reshape_feature = des.reshape(-1, 1)

AttributeError: 'tuple' object has no attribute 'reshape'

原因:

错误写法:

des = sift.detectAndCompute(gray, None)  # 检测并计算描述符

正确写法:
Kp,des=sift.detectAndCompute(gray,None)#检测并计算描述符


注意:detect和Compute可以一起写,也可以分开写,


import os, codecs
import cv2
import numpy as np
from sklearn.cluster import KMeans

def get_file_name(path):
'''''
Args: path to list;  Returns: path with filenames
'''
filenames = os.listdir(path)
path_filenames = []
filename_list = []
for file in filenames:
if not file.startswith('.'):
path_filenames.append(os.path.join(path, file))
filename_list.append(file)

return path_filenames

def knn_detect(file_list, cluster_nums, randomState=None):
features = []
files = file_list

sift = cv2.xfeatures2d.SIFT_create()
for file in files:
print(file)
img = cv2.imread(file)
img = cv2.resize(img, (32, 32), interpolation=cv2.INTER_CUBIC)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
print(gray.dtype)
des = sift.detectAndCompute(gray, None)  # 检测并计算描述符
# Kp,des=sift.detectAndCompute(gray,None)#检测并计算描述符
# des =sift.detect(gray, None)# sift.detectAndCompute(gray, None)
# # # 找到后可以计算关键点的描述符
# Kp, des = sift.compute(gray, des)
if des is None:
file_list.remove(file)
continue
reshape_feature = des.reshape(-1, 1)
features.append(reshape_feature[0].tolist())

input_x = np.array(features)

kmeans = KMeans(n_clusters=cluster_nums, random_state=randomState).fit(input_x)

return kmeans.labels_, kmeans.cluster_centers_

def res_fit(filenames, labels):
files = [file.split('/')[-1] for file in filenames]

return dict(zip(files, labels))

def save(path, filename, data):
file = os.path.join(path, filename)
with codecs.open(file, 'w', encoding='utf-8') as fw:
for f, l in data.items():
fw.write("{}\t{}\n".format(f, l))

def main():
path_filenames = get_file_name("./picture/")

labels, cluster_centers = knn_detect(path_filenames, 2)

res_dict = res_fit(path_filenames, labels)
save('./', 'knn_res.txt', res_dict)

if __name__ == "__main__":
main()


异常:

    reshape_feature = des.reshape(-1, 1)

AttributeError: 'tuple' object has no attribute 'reshape'

原因:

错误写法:

des = sift.detectAndCompute(gray, None)  # 检测并计算描述符

正确写法:
Kp,des=sift.detectAndCompute(gray,None)#检测并计算描述符


注意:detect和Compute可以一起写,也可以分开写,


import os, codecs
import cv2
import numpy as np
from sklearn.cluster import KMeans

def get_file_name(path):
'''''
Args: path to list;  Returns: path with filenames
'''
filenames = os.listdir(path)
path_filenames = []
filename_list = []
for file in filenames:
if not file.startswith('.'):
path_filenames.append(os.path.join(path, file))
filename_list.append(file)

return path_filenames

def knn_detect(file_list, cluster_nums, randomState=None):
features = []
files = file_list

sift = cv2.xfeatures2d.SIFT_create()
for file in files:
print(file)
img = cv2.imread(file)
img = cv2.resize(img, (32, 32), interpolation=cv2.INTER_CUBIC)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
print(gray.dtype)
des = sift.detectAndCompute(gray, None)  # 检测并计算描述符
# Kp,des=sift.detectAndCompute(gray,None)#检测并计算描述符
# des =sift.detect(gray, None)# sift.detectAndCompute(gray, None)
# # # 找到后可以计算关键点的描述符
# Kp, des = sift.compute(gray, des)
if des is None:
file_list.remove(file)
continue
reshape_feature = des.reshape(-1, 1)
features.append(reshape_feature[0].tolist())

input_x = np.array(features)

kmeans = KMeans(n_clusters=cluster_nums, random_state=randomState).fit(input_x)

return kmeans.labels_, kmeans.cluster_centers_

def res_fit(filenames, labels):
files = [file.split('/')[-1] for file in filenames]

return dict(zip(files, labels))

def save(path, filename, data):
file = os.path.join(path, filename)
with codecs.open(file, 'w', encoding='utf-8') as fw:
for f, l in data.items():
fw.write("{}\t{}\n".format(f, l))

def main():
path_filenames = get_file_name("./picture/")

labels, cluster_centers = knn_detect(path_filenames, 2)

res_dict = res_fit(path_filenames, labels)
save('./', 'knn_res.txt', res_dict)

if __name__ == "__main__":
main()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: