我有一個簡單的任務: 我有一個圖像和點的陣列。對於每個點我想從圖像中切出盒子。如何通過播放切片來切片圖像?錯誤:在python中'只能將整數標量數組轉換爲標量索引'?
我可以在一個循環做到這一點,但對於千點是很慢的,所以我需要做沒有循環。我試圖將數組廣播到切片值。下面是說明了這個問題的一些最少的代碼:
import numpy as np
frame = cv2.imread("input.png")
pts = np.array([[10,20],
[30,40],
[50,60]]) #and thousands more
x1s = pts[:, 0]
y1s = pts[:, 1]
x2s = x1s + 5
y2s = y1s + 5
cutouts = frame[x1s:x2s,y1s:y2s]
它給我的錯誤:
TypeError: only integer scalar arrays can be converted to a scalar index
爲什麼?切片都是整數(標量)的一維數組。這應該工作。什麼是錯的,我該怎麼做對嗎?關於此錯誤的
其它計算器職位似乎什麼都沒有做切片或廣播。
編輯:要清楚,點陣列將是千點。我想要一個數以千計的5x5切片,每個點有一個。所以片起價爲(10,20),另一片起價爲(30,40),等等等等
EDIT2:人們說這樣的話,你不能一個二維數組上播出。然而這個的作品,這是相同的概念。爲什麼?
import numpy as np
import cv2
frame = np.arange(50).reshape(5,10)
pts1 = np.array([1,2,3])
pts2 = np.array([4,5,6])
cutouts = frame[pts1,pts2]
print cutouts
#outputs [14 25 36]
的「整數標量數組」是像'陣列(3)' - 0維包含單個整數數組。它不是任意整數標量的數組。 – user2357112
請參閱編輯2.爲什麼一個示例工作,另一個示例沒有。 –
您不能將陣列用作切片端點。 – user2357112