python无法将输入数组从形状(144,291,3)广播到形状(140,300,3)

时间:2018-10-31 11:20:24

标签: python

我正在尝试在python中创建一种裁剪和缩放框架的方法,如果框架对于屏幕来说太小,则应该插入黑条。这里的问题出在数组之内,出于某种原因,它无法彼此融合,我也不知道为什么。并非每帧都发生这种情况,它似乎只是发生在一个随机帧上,与其他帧相比没有任何特殊之处。但是,它确实总是在同一帧上发生。

def displayFrame(image, csFrame, h, w):
resizedImage = cv2.resize(image, (0,0), fx=csFrame.WScale, fy=csFrame.HScale)
desiredImage = resizedImage[int(csFrame.H * csFrame.HScale):int(csFrame.H * csFrame.HScale + h), int(csFrame.W * csFrame.WScale):int(csFrame.W * csFrame.WScale + w)]
starth = 0
startw = 0
newImage = np.zeros((h, w, 3), np.uint8) #If one of the two directions is "zoomed out" too much, black bars will fill in the excess space
if len(desiredImage) < h:
    starth = int(np.floor((h-len(desiredImage))/2))
if (len(desiredImage[0])) < w:
    startw = int(np.floor((w-len(desiredImage[0]))/2))
desiredH = len(desiredImage)
desiredW = len(desiredImage[0])
print("desired:", len(desiredImage[0:desiredH][0:desiredW]), len((desiredImage[0:desiredH][0:desiredW])[0]), "newImage:", len(newImage[starth:(starth+desiredH)][startw:(startw+desiredW)]), len((newImage[starth:(starth+desiredH)][startw:(startw+desiredW)])[0]), "start:", starth, startw)
newImage[starth:(starth+desiredH)][startw:(startw+desiredW)] = desiredImage[0:desiredH][0:desiredW]
return newImage

错误发生在返回之前的最后一行。我真的不知道为什么,但是似乎“ DesiredH”和“ DesiredW”在这些不同的位置上具有不同的值。在此操作中,“ newImage”和“ desiredImage”都没有超出其边界。我真的不知道为什么这些数组没有相同的大小,只是看看这个,它们应该具有相同的大小,因为我将它们传递给它们的形状应该是什么样。

1 个答案:

答案 0 :(得分:0)

您必须用张量填充张量,因为形状不会累加,144*291*3不等于140*300*3。我建议从数据集中删除该样本。