파이썬 NUMPY 이미지 파일 색깔 수정하
2023. 8. 3. 17:00ㆍDATA PROGRAMMING/PYTHON
문제:
이미지 픽셀을 변경해주는 함수를 제작해봅시다.
- 이미지를 Array로 변환합니다.
- 주어진 시작 좌표와 가로, 세로 길이만큼 원하는 색상으로 변경합니다.
- 값을 수정한 Array를 이미지로 만들어서 반환합니다.
modify_image()
매개변수
- 이미지: image: PIL.Image()
- 시작 x좌표: x: int
- 시작 y좌표: y: int
- 가로 길이: width: int
- 세로 길이: height: int
- 변경할 색상: color: List[int],
반환값
- 픽셀 변경을 진행한 이미지
내가 처음 작성한 코드
def modify_image(image,x,y,width,height,color) :
image_array = np.array(image)
image_array[x:x+width][y:y+height] = np.array(color)
img = Image.fromarray(image_array)
return img
modify_image(kitten,20,20,25,30,[0,0,0])
결과
나는 x : 20~25, y : 25~30의 좌표를 검은색으로 수정하고 싶었지만, 결과는 그렇지 못했다 이유는 무엇일까?
2차원 array를 슬라이싱 할때는 각 차워별로 슬라이싱하면 원하는 결과가 나오지 않고 한꺼번에 슬라이싱을 해줘야 하기 때문이다 즉, array[0:2][0:2]가 아니라 , array[0:2,0:2]로 수정해야 원하는 결과가 나온다.
예를들어 list_s = [[1,2,3,4],[7,8,9,0]]이 있을때 [[1,2],[7,8]]를 뽑아오고 싶다면 list_s를 넘파이를 활용해 array로 바꾸고 슬라이싱을 해주면 된다. 이때, list_s[0:2][0:2]가 아니라 list_s[0:2,0:2]로 해야한다. 이를 이용해 위 코드를 수정하면
def modify_image(image,x,y,width,height,color) :
image_array = np.array(image)
image_array[x:x+width,y:y+height] = np.array(color)
img = Image.fromarray(image_array)
return img
modify_image(kitten,20,20,25,30,[0,0,0])
원하는 결과가 나오는 것을 확인할수 있었다. 또한 이중 for문을 활용할 수도 있다.
def modify_image(image,x,y,width,height,color) :
img_arr : np.array(image)
for j in range(0,height+1):
for i in range(0,width+1):
img_arr[j,i] = np.array(color)
'DATA PROGRAMMING > PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬을 통해 전화번호부 만들기 (0) | 2023.09.13 |
---|---|
[Python] Class의 정확한 이해와 사용법 (0) | 2023.09.13 |
[파이썬] 클래스가 불균형한 데이터 머신러닝 분류 모델 실습 (0) | 2023.06.04 |
파이썬을 통해 간단하게 학교 성적 평균, 표준편차, 백분위 구하기 (0) | 2023.05.29 |
파이썬 Pandas 기초부터 심화까지 - 1 (인덱싱, loc, 결측치) (0) | 2023.05.11 |