代码之家  ›  专栏  ›  技术社区  ›  user2205916

值错误:无法从形状(同一形状)广播输入数组

  •  0
  • user2205916  · 技术社区  · 7 年前

    从shape广播输入数组时出错。通常,这似乎是由转换某个维度数组引起的 p 在某个维度数组中: p+1 p-1 . 然而,我的输入和输出的形状似乎是一样的:3个维度。所以我的问题是,我做错了什么,我该如何着手解决这个问题?

    ValueErrorTraceback (most recent call last)
    <ipython-input-21-e821b7e8e0de> in <module>()
        108                   "overlay_glasses.shape: ", overlay_glasses.shape)
        109 
    --> 110             overlay_img[int(y):int(y+h),int(x):int(x+w)] = overlay_glasses
        111 
    

    下面是print语句的输出,以便更好地理解上述代码。

    'overlay_img.shape: '    , (365, 365, 3), 
    'overlay_glasses.shape: ', ( 34,  99, 3)
    'x: ', 623.26, 'y: ', 265.9
    'h: ', 34, 'w: ', 99
    

    较大的代码段:

    [omitted code here]
    if len(centers)>0:
        # change the given value of 2.15 according to the size of the detected face
        glasses_width = 2.16*abs(centers[1][0]-centers[0][0])
        overlay_img = np.ones(shape = roi_color.shape,
                              dtype = np.uint8)*255
        h,w = glass_img.shape[:2]
        scaling_factor = glasses_width/w
        overlay_glasses = cv2.resize(src           = glass_img,
                                     dsize         = None,
                                     fx            = scaling_factor, # scale factor along x-axis; when it equals 0, it is computed as \texttt{(double)dsize.width/src.cols}
                                     fy            = scaling_factor, # scale factor along y-axis
                                     interpolation = cv2.INTER_AREA) # INTER_AREA: resampling using pixel area relation. It may be a preferred method for image decimation,
    
        x = centers[0][0] if centers[0][0] < centers[1][0] else centers[1][0]
    
        #   The x and y variables  below depend upon the size of the detected face.
        x   -=  0.26*overlay_glasses.shape[1]
        y   +=  0.85*overlay_glasses.shape[0]
        print("x: ", x,
              "y: ", y)
    
        #slice the height, width of the overlay image.
        h,  w   =   overlay_glasses.shape[:2]
    
        print("h: ", h,
              "w: ", w)
    
        print("overlay_img.shape: ", overlay_img.shape,
              "overlay_glasses.shape: ", overlay_glasses.shape)
    
        overlay_img[int(y):int(y+h),int(x):int(x+w)] = overlay_glasses # this is the offending line of code
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Eypros    7 年前

    你的 x 超出范围,无法为 overlay_img 你已经提供了。图像的维度是(365、365、3),但您提供 X 623岁 x+w 722岁。这将创建一个空的子图像,不能用 overlay_glasses 的内容。很明显是有问题的 X 协调。