red
및 blue
은 이미지의 단지 도면이다. img[:,:,0] = red
을 수행하면 img
이 변경되고 blue
은 복사가 아니라 단지 뷰 (기본적으로 하위 배열 img[:,:,0]
참조) 일 뿐이므로 원래의 파란색 채널 값이 느슨해집니다. 기본적으로 임시 복사본이 있다고 가정합니다. .copy()
을 추가하면 제대로 작동합니다.
img = np.arange(27).reshape((3,3,3))
red = img[:,:,2].copy()
blue = img[:,:,0].copy()
img[:,:,0] = red
img[:,:,2] = blue
print("with copy:\n", img)
img = np.arange(27).reshape((3,3,3))
red = img[:,:,2]
blue = img[:,:,0]
img[:,:,0] = red
img[:,:,2] = blue
print("without copy:\n",img)
결과 :
with copy:
[[[ 2 1 0]
[ 5 4 3]
[ 8 7 6]]
[[11 10 9]
[14 13 12]
[17 16 15]]
[[20 19 18]
[23 22 21]
[26 25 24]]]
without copy:
[[[ 2 1 2]
[ 5 4 5]
[ 8 7 8]]
[[11 10 11]
[14 13 14]
[17 16 17]]
[[20 19 20]
[23 22 23]
[26 25 26]]]
참고 : 당신은 실제로 단지 1 개 채널의 1 임시 사본이 필요합니다. 당신이 그것을 다시 할당하지 않는 한 아니면 단순히이 다시보기를 만들 것이다 img[:,:,::-1]
할 수 있지만, 교환 채널, img
은 변하지 남아있을 것입니다 :
img = np.arange(27).reshape((3,3,3))
print(img[:,:,::-1])
print(img)
img = img[:,:,::-1]
print(img)
결과 :
[[[ 2 1 0]
[ 5 4 3]
[ 8 7 6]]
[[11 10 9]
[14 13 12]
[17 16 15]]
[[20 19 18]
[23 22 21]
[26 25 24]]]
[[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]]
[[ 9 10 11]
[12 13 14]
[15 16 17]]
[[18 19 20]
[21 22 23]
[24 25 26]]]
[[[ 2 1 0]
[ 5 4 3]
[ 8 7 6]]
[[11 10 9]
[14 13 12]
[17 16 15]]
[[20 19 18]
[23 22 21]
[26 25 24]]]
이 근무! 감사 :) –