상위 목록: 하위 목록: 작성 날짜: 읽는 데 10 분 소요

픽셀 접근(Pixel Access)

픽셀 접근은 이미지 배열에서 특정 좌표에 대한 값을 받아오거나, 변경할 때 사용합니다.

Numpy 배열의 요소 접근 방식과 동일하며, 직접 값을 변경하거나 할당할 수 있습니다.

OpenCV의 Mat 클래스는 Numpy 배열을 사용하므로 문자열, 리스트, 튜플 등에 사용되는 슬라이싱을 동일하게 사용할 수 있습니다.



메인 코드

import cv2
import numpy as np

gray = np.linspace(0, 255, num=90000, endpoint=True, retstep=False, dtype=np.uint8).reshape(300, 300, 1)
color = np.zeros((300, 300, 3), np.uint8)
color[0:150, :, 0] = gray[0:150, :, 0]
color[:, 150:300, 2] = gray[:, 150:300, 0]

x, y, c = 200, 100, 0
access_gray = gray[y, x, c]
access_color_blue = color[y, x, c]
access_color = color[y, x]

print(access_gray)
print(access_color_blue)
print(access_color)

cv2.imshow("gray", gray)
cv2.imshow("color", color)
cv2.waitKey(0)
cv2.destroyAllWindows()


세부 코드

gray = np.linspace(0, 255, num=90000, endpoint=True, retstep=False, dtype=np.uint8).reshape(300, 300, 1)

회색 그라데이션 이미지인 gray를 선언합니다.

그라데이션 이미지는 등간격(numpy.linspace)을 활용해 구현할 수 있습니다.

등간격 배열을 생성하면, 이미지 배열이 아니므로, 차원 변경(numpy.reshape) 함수를 활용해 단일 채널 이미지로 변경합니다.

  • 등간격 사용하기 : Python Numpy 4강 바로가기

  • Tip : 300×300×1 크기이 이미지를 생성할 예정이므로, num은 90000을 갖습니다.


color = np.zeros((300, 300, 3), np.uint8)
color[0:150, :, 0] = gray[0:150, :, 0]
color[:, 150:300, 2] = gray[:, 150:300, 0]

색상 그라데이션 이미지인 color를 선언합니다.

Blue 채널0 ~ 150 행gray의 값을 할당하고, Red 채널150 ~ 300 열gray 값을 할당합니다.

배열의 접근 방식은 배열[행 시작:행 끝, 열 시작: 열 끝, 차원 시작:차원 끝]의 구조를 갖습니다.

슬라이싱 방법과 동일하게 접근하며 행, 열, 차원의 순서입니다.


x, y, c = 200, 100, 0
access_gray = gray[y, x, c]
access_color_blue = color[y, x, c]
access_color = color[y, x]

print(access_gray)
print(access_color_blue)
print(access_color)

결과 :
85
85
[85 0 85]

요소 접근시 배열 접근은 행, 열, 차원 구조이므로, y, x, 차원의 형태로 접근해야 합니다.

그러므로, y, x, c의 형태로 이미지 요소에 접근합니다.

만약, 차원을 포함하지 않는 경우 세 차원 모두 반환하므로, Numpy 배열 형식의 값을 반환합니다.

요소 접근에도 콜론(:)을 통해 범위 형태로 값을 접근할 수 있습니다.

또한, 콜론(:)을 한번 더 포함한다면 간격(step)으로도 값을 뛰엄뛰엄 받아올 수 있습니다.



출력 결과

댓글 남기기