Python (numpy, cv2)에서 이미지 데이터에 대한 픽셀 위치 조작 메모
배경
[...,::-1]
심지어 기호적이기 때문에 검색하기가 어렵습니다 BGR -> RGB
cv2는 표준으로 BGR 이미지로 처리하는 것 같습니다. 저장하거나 matplotlib로 표시 할 때 RGB로 정렬해야합니다.
(H, W, C) 배열입니다.
[:, :, ::-1]
는 C 차원 (채널) 요소를 바꿉니다.:
는 slice ((start, end, step)
)의 차원의 모든 요소를 나타냅니다 (None, None, 1)
(?) or (0, n-1, 1)
에 해당합니다.::-1
도 슬라이스에서 (0, n-1, -1)
에서 end에서 start로 역방향으로 하나씩 진행합니다.RGB (3 요소)의 경우
[2, 1, 0]
인덱싱입니다.따라서 BGR -> RGB로 정렬 할 수 있습니다.
. . .
img[...,::-1]
케이스.초보자는 너무 수수께끼를 전혀 모릅니다.
...
는 검색 성이 낮고 어렵습니다....
= :, :
의 약어였습니다. 각 차원에서 모든 요소를 선택한다고 생각합니까?[..., ::-1]
= [:, :, ::-1]
= [:, :, [2, 1, 0]]
입니다.특정 채널에만 처리하고 싶습니다.
예를 들어 G 채널 만 1을 설정하고 싶습니다.
img[:, :, 1] = 1
예.
alpha를 RGB로 브로드 캐스트하고 싶습니다.
numpy 만.
rgb (3 채널) 및 alpha (1 채널) 이미지가있는 경우 단순히
rgb * alpha
로 곱할 수 없습니다.alpha의 값을 RGB로 브로드 캐스트 (복제)해야합니다.
fg * alpha[:, :, None]
로 None
를 지정하면 브로드 캐스트됩니다. None = np.newaxis 로서 차원을 하나 늘리는 행동이 되고 있습니다(알기 어렵다...)
ast (구문 트리)를 제대로 고려하고있는 것 같고,
bg * (1 - alpha[:, :, None])
같은 방법으로 계산 한 다음 RGB와 곱셈을 잘 수행하십시오.화소 요소를 판정하고 대입하는 등
for i in range(len(pixels)):
pixels[i] = pixels[i] < 0.5 ? 0 : pixels[i]
같은 작업을하고 싶습니다.
pixels[pixels < 0.5] = 0
그렇게하면 모든 픽셀로 처리됩니다.
shape (이미지 크기 및 채널 수)가 있으면 다른 ndarray를 사용할 수 있습니다.
e.g.
alpha[trimap_np[:, :, 0] == 1] = 0
alpha 이미지에서 trimap_np의 R 채널은 1의 픽셀 위치 값을 0으로 설정합니다.
fg[alpha == 1] = image_np[alpha == 1]
T.B.W.
이미지를 부분 영역으로 나누기
slice 기법에서는, step 로 4 픽셀마다 등을 지정할 수 있습니다만, 4 pixel 쭉이라고 하는 것은 할 수 없기 때문에, for 문등으로 slide
(start, end, 1)
로 start, end 를 각각 지정하는지, numpy, cv2 당으로 부분 영역 로 분할하는 함수를 사용하십시오.(덧붙여서 numpy.tile는 이미지를 tile 형태로 반복하여 배열하는 함수이므로 분할에는 사용할 수 없습니다)
기타
시각적으로 설명해 주는 기사
Numpy’s indexing and slicing notation explained visually
htps : // 메이 m. 이 m/@부 ch.ぃ ぃ / n mpys- 어서 ぃ ん ぃ ん ぃ d ぃ し ん ー ー ー ー ー ー ー ー ぁ 이네 d
Reference
이 문제에 관하여(Python (numpy, cv2)에서 이미지 데이터에 대한 픽셀 위치 조작 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/syoyo/items/7f49ff36244998bc0571텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)