2016-12-07 15 views
0

내가 파이썬에서 10 개 RGB 이미지의 스택을 저장하기 위해 노력하고있어,하지만 난 다음 오류 얻을 :에 ValueError : 모양으로 모양 (256,340,3)에서 입력 배열을 브로드 캐스트하지 수 (256,340,30)

rgb[:,:,:, i] = img 
ValueError: could not broadcast input array from shape (256,340,3) into shape (256,340,30) 

내가 시도 : 나는 또한 시도

img = cv2.imread(img_file, cv2.IMREAD_UNCHANGED) 
rgb[:,:,:, i] = img 

:

chunks = 10 
step = int(math.floor((duration - chunks + 1)/(num_samples))) 
dims = (256, 340, chunks * 3, num_samples) 
rgb = np.zeros(shape=dims, dtype=np.float64) 
    for i in range(num_samples): 
    for j in range(chunks): 
     img_file = os.path.join(vid_name, 'image_{0:04d}.jpg'.format(i*step+j+1 + start_frame)) 
     img = cv2.imread(img_file, cv2.IMREAD_UNCHANGED) 
     img = cv2.resize(img, dims[1::-1]) 
     rgb[:,:,(j+1)*3, i] = img 

img_file는 그것이 올바른 도착, 이미지의 경로를 유지합니다. 나는 그것을 테스트했습니다.

print("%r") % img_file 

내가 원하는 것은 10 개의 스택 된 RGB 이미지입니다.

도움을 주시면 감사하겠습니다. 감사합니다.

+0

예, 좀 더 코드로 게시물을 업데이트했습니다. 고맙습니다! – AMayer

+0

오, 미안, 내 잘못이야. 복사물이 예상대로 작동하지 않았습니다. 게시물을 업데이트했습니다. 고맙습니다! – AMayer

답변

1

접근 # 1 : 것들을 간단하게하기 위해, 나는 5D 배열을 초기화하는 대신하여 두 축으로 두 번째 마지막 축을 분할, 그들을 함께 chunks3을 유지과 같이 제안 -

dims = (256, 340, chunks , 3, num_samples) 

이 편집을 보완하려면 중첩 루프 내부의 출력 배열에 이미지의 할당 부분을 지정해야합니다 (예 :

).
rgb[:,:,j, :, i] = img 

필요한 경우 마지막에, 그 모든 작업을 수행, 단지 4D 배열로 바꿀 - 그래서

rgb.shape = (256, 340, chunks* 3, num_samples) 

을, 필요한 세 가지 편집에.


접근 방법 # 2 : 그대로 질문에서 깨어나 코드를 유지, 우리는 다만 수 -

rgb[:,:,j*3:(j+1)*3, i] = img 
+0

한 가지 더. 나는 rgb를 뒤집고 싶다. rgb_flip [:, :, j, :] 당신이 제안한대로 : rgb_flip [:, :, (j + 1) * 3, i] = img [: , i] = img [:, :: - 1]. 그리고 rgb_flip.shape = (25, 34, 덩어리 * 3, num_samples). 같은 효과가 있습니까? – AMayer

+0

@AMayer에 따라 다릅니다. 어떤 이미지 크기를 뒤집을까요? 처음 두 치수는 행/열을 뒤집을 것이고 마지막 것은 색상 채널을 뒤집을 것입니다. – Divakar

+0

예를 들어 봅시다. 10 개의 겹쳐진 rgb 이미지 대신 1 개의 rgb 이미지 만 있다고 가정 해 봅시다. 다음 코드는 올바른 작업을 수행합니다. rgb_flip [:, :, :, i] = img [:, - - 1, :]. 나는 같은 일을하고 싶지만, 제 경우에는 10 개의 RGB 이미지가 쌓여 있습니다. 제 예제가 충분히 분명하기를 바랍니다. 고맙습니다! – AMayer