python 当我得到“参数`image`必须是二维数组”错误时,如何使用numpy转换3D图像?

ymdaylpp  于 2023-04-10  发布在  Python
关注(0)|答案(1)|浏览(182)

我正在使用NUAA数据集,并试图分类真实的和欺骗数据集。现在我得到的输入是三维的。我无法将其转换为二维。

class to_LBP():
  '''class to calculate LBP'''

  def __init__(self, n_points_radius, method):
    self.n_points=n_points_radius
    self.method=method       
    self.channels=len(self.n_points) 
    self.kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
    

  def  __call__(self, sample):       
    w, h=sample.size
    temp=np.zeros((self.channels, w, h))
    # print("sample", sample)
    # print(type(sample)) 
    image= np.array(sample)
    # print(image)   
    print("image.shape",image.shape) 
    image=cv2.filter2D(image, -1, self.kernel)    
    for idx, values in enumerate(self.n_points):             
      lbp=local_binary_pattern(image, values[0], values[1], self.method)              
      temp[idx]=lbp      
    return (temp,  image)
niknxzdl

niknxzdl1#

如果要将此3D数组转换为2D数组,可以使用flatten()将每个通道展平,然后使用np.hstack()水平连接生成的1D数组。以下是如何执行此操作的示例:

lbp_features, filtered_image = to_LBP(n_points_radius, method)(sample)
flattened_features = []
for channel in range(lbp_features.shape[0]):
    flattened_features.append(lbp_features[channel].flatten())
flattened_features = np.hstack(flattened_features)

注意:得到的展平阵列将具有self.channels * w * h的长度,这是每个通道的LBP特征的数量。

相关问题