画像を分割して,色ヒストグラムを算出するプログラムを作りたいのですが以下のエラーが行き詰っています.
どなたかご教授ください
前回,質問した時にヒストグラムに渡せていなかったので追加しました.が以下のようにエラーが出てしまいまいました.
何も返せていないということなのですが,どこで誤っているのかわかりません.
やりたいことは分割してそれぞれで算出したHSVをヒストグラムにしたいです.
(264, 352, 3) -> (264, 351, 3) Traceback (most recent call last): File "image_descriptor.py", line 46, in <module> x = range(len(features)) TypeError: object of type 'NoneType' has no len()
python
1#_*_ coding: utf-8 _*_ 2import cv2 3import matplotlib.pyplot as plt 4import numpy as np 5 6 7class ImageDescriptor: 8 def __init__(self,histSize): 9 self.histSize = histSize #クラスの変数に登録 10 """ 11 画像を3x3に分割し、各ブロックで算出されたHSV色ヒストグラムを結合して返す関数. 12 filename : 画像のファイルパス 13 """ 14 def describe(self,filename): 15 features = [] 16 num_vsplits = 3 17 num_hsplits = 3 18 19 img = cv2.imread(filename) 20 img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#RGB空間からHSV空間に変換 21 channels = [0,1,2] 22 mask = None #画像マスクを使用しない 23 #histSize =[10,4,4] 24 ranges = [0,180,0,256,0,256] 25 26 h,w = img.shape[0:2] 27 crop_img = img[:h // num_vsplits * num_vsplits, :w// num_hsplits * num_hsplits] 28 print('{} -> {}'.format(img.shape,crop_img.shape)) 29 30 for h_img in np.vsplit(crop_img, num_vsplits): 31 #垂直方向に分割する 32 for v_img in np.hsplit(h_img, num_hsplits): 33 features.append(v_img) 34 hist = cv2.calcHist([v_img],channels,mask,histSize,ranges) 35 hist_vec = hist.flatten() 36 n_hist_vec = hist_vec / hist_vec.sum() 37 features = features.extend(n_hist_vec) 38 return features 39 40if __name__ == '__main__': 41 histSize =[10,4,4] 42 img_dsc = ImageDescriptor(histSize) 43 filename = './holidays/database/10.jpg' 44 features = img_dsc.describe(filename) 45 print(type(features)) 46 x = range(len(features)) 47 plt.bar(x,features) 48 plt.show()
回答1件
あなたの回答
tips
プレビュー