2017-11-16 6 views
1
for x in range(0,img_row): 
    for y in range(0,img_col): 
     img_lst.append([img[x,y][0],img[x,y][1],img[x,y][2]]) 
return img_lst 

어떻게 목록 이해력을 사용할 수 있습니까? 목록 반복에 대한 파이썬 3

img_lst = [img[x,y][0], img[x,y][1], img[x,y][2] y for y in range(0,img_col) for x in range(0, img_row)] 

나는이 시도하지만 내 잘못된 구문을주고 내가 처음에 "Y"를 제거 할 때 그것은 Y가

을 정의되지 않은 내게주는 전체 기능 :

def cvimg_to_list(img): 
    img_row = img.shape[0] 
    img_col = img.shape[1] 
    img_lst=[] 

    img_lst = [img[x,y][0], img[x,y][1], img[x,y][2] y for y in range(0,img_col) for x in range(0, img_row)] 
    return img_lst 
+1

'... IMG [X, Y]에 대한 충분한 명성을하지 않는 질문에 제대로 대답없는 2] y ...'이것은 틀린 것 같습니다 –

답변

4

list.append() 호출로 중첩 된 루프를 목록 이해로 변환하려면 .append(...) 괄호 사이의 모든 것을 앞쪽으로 이동하고 for 루프 및 핀 후 : 콜론을 제거하기 만하면됩니다 동맹 결과 주위에 [...]을 추가

[ 
[img[x,y][0],img[x,y][1],img[x,y][2]] 
for x in range(0,img_row) 
    for y in range(0,img_col) 
] 

주를 for 루프 의 순서가를 변경하지 않습니다!

이것은 한 줄에 입력 할 수 있습니다. 당신은 세 가지 실수를

[img[x, y][:3] for x in range(img_row) for y in range(img_col)] 

: 당신이 img[x, y]에서 처음 3 개 값을 갖는 새 목록을 작성하기 때문에, 당신은 또한 슬라이스를 사용할 수 있습니다

[[img[x, y][0], img[x, y][1], img[x, y][2]] 
for x in range(img_row) for y in range(img_col)] 

: 나는 가독성에 대한 몇 가지 공백을 추가하고 range() 전화를 간소화 당신의 시도에서; for 루프의 순서를 바꿨고, 여분으로 추가 된 y을 입력하고 각 반복을 생성하는 목록 개체에 대해 닫는 괄호 ]을 삭제했습니다.

1

나는 무엇을 성취하려고하는지 완전히 모르겠지만 내 가정이 정확하다면 (opencv로 연 이미지의 세 채널에서 픽셀 값 목록을 얻고 싶을 때) 이것을하기 위해 numpy를 사용할 수 있습니다.

cv2가 RGB가 아닌 BGR로 이미지를로드한다는 점에 유의하십시오.

참고 : [I 오히려 주석으로이를 게시했을하지만 난 그

+0

[일반 목적]에 대한 의견의 제한을 고려하십시오 (https://meta.stackexchange.com/questions/214173/why-do-i-need-50- 평판 - 의견 - 무엇을 할 수 있습니까?) 대신에 당신이 잘 할지라도, 잘 받아 들여지지 않을 수도있는 회피를 사용하십시오. 이 경우 OP가 이미지를 목록으로 축소하는 방법을 찾고있는 경우 게시물에 답 **으로 장점 **이 있지만 이해 목록을 명시 적으로 작성하는 데 관심이있는 경우 ... – Reti43