간단한 작업이 있습니다. 이미지와 점 배열이 있습니다. 각 포인트에 대해 이미지에서 상자를 잘라내고 싶습니다.슬라이스를 브로드 캐스팅하여 이미지를 분할하는 방법은 무엇입니까? 오류 : 파이썬에서 '정수형 스칼라 배열 만 스칼라 인덱스로 변환 할 수 있습니까?'
for 루프에서이 작업을 수행 할 수 있지만 수천 개의 점 때문에 매우 느리므로 루프없이이 작업을 수행해야합니다. 배열을 슬라이스 값에 브로드 캐스팅하려고합니다.
TypeError: only integer scalar arrays can be converted to a scalar index
이유 : 나에게 오류를 제공
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]
: 여기에 문제를 보여 최소한의 코드는? 슬라이스는 모두 1 차원 정수 배열 (스칼라)입니다. 이것은 효과가있다. 무엇이 잘못되었으며, 어떻게해야합니까?
이 오류에 대한 다른 stackoverflow 게시물은 슬라이싱 또는 방송과 아무런 관련이없는 것 같습니다.
편집 : 명확하게 말하면 포인트 배열은 수천 포인트입니다. 각 5x5 슬라이스의 수천 배열을 원한다. 따라서 (10,20)에서 시작하는 슬라이스, (30,40)에서 시작하는 다른 슬라이스 등
Edit2 : 사람들은 2D 배열에서 방송 할 수없는 것처럼 말합니다. 그러나 이은 동일한 개념입니다. 왜?
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]
"정수형 스칼라 배열"은 하나의 정수를 포함하는 0 차원 배열 인'array (3)'과 같습니다. 정수 스칼라의 임의의 배열이 아닙니다. – user2357112
편집 2를 참조하십시오. 왜 한 예가 효과가 있고 다른 예는 효과가 없습니다. –
배열을 슬라이스 끝점으로 사용할 수 없습니다. – user2357112