Pixel: Picture Element (화소)
한 픽셀은 RGB로 구성되어 있음

해상도: 화소 수

배열로 표현해서 가로, 세로가 뒤집혀서 나올 수 있음

이미지에서 원점은 좌측 상단

ROI 추출 (Region of Interest, 관심 영역)
import cv2 as cv
# 이미지 불러오기
img_path = "./파일명.png"
img = cv.imread(img_path)
# ROI를 지정할 영역의 좌표 (x, y, width, height)
x, y, w, h = 100, 100, 200, 400 # ex 좌표
# ROI 추출
roi = img[y:y+h, x:x+w]
# ROI 표시하기
cv.imshow('ROI', roi)
cv.waitKey(0)
cv.destroyAllWindows()
# ROI 저장하기
cv.imwrite('roi_image.jpg', roi)

import cv2 as cv
# 이미지 불러오기
img_path = "./example_512.png"
img = cv.imread(img_path)
img_R = img.copy()
# 다른 채널 값 제거
img_R[:, :, 0] = 0
img_R[:, :, 1] = 0
cv.imshow('Original', img)
cv.imshow('Red Channel', img_R)
cv.waitKey(0)
cv.destroyAllWindows()

import cv2
img = cv2.imread('resized_Checkerboard.png')
# 이미지를 반전시키기 위해 RGB 값을 255에서 뺍니다
inverted_img = 255 - img
cv2.imshow('original Image', img) # 'original Image' 창
cv2.imshow('Inverted Image', inverted_img) # 'Inverted Image' 창
cv2.waitKey(0)
cv2.destroyAllWindows()

import numpy as np
import cv2
src = cv2.imread('이미지.png')
add_value = 255
added_img = src + add_value
cv2.imshow('src', src)
cv2.imshow('added_img', added_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

-> Wrap Around
-> uint8 데이터 타입은 0~255까지의 값을 저장할 수 있음
-> 255를 초과하는 값을 저장하려하면 그 값은 256으로 나눈 나머지로 'wrap around' 됨
-> Modular. Mod. (모듈로 연산)
cv.add(src1, src2[, dst[, mask[, dtype]]]) -> dst
-> src1, src2: 더할 두 입력 배열 (주로 이미지 데이터)
-> dst (선택): 출력 배열 입력과 같은 크기와 타입이어야 함, 대부분 생략
-> mask (선택): 연산을 적용할 영역을 정의하는 마스크 배열
-> dtype (선택): 출력 데이터 타입
import numpy as np
import cv2
src = cv2.imread('example_512.png')
add_value = 100
added_img02 = cv2.add(src, np.full(src.shape, add_value, dtype=np.uint8))
cv2.imshow('src', src)
cv2.imshow('added_img', added_img02)
cv2.waitKey(0)
cv2.destroyAllWindows()

sub_value = 100
sub_img = cv2.subtract(src, np.full(src.shape, sub_value, dtype=np.uint8))


트루컬러(truecolor)영상: 컬러사진처럼 색상 정보를 가지고 있어서 다양한 색상 표현, RGB색 성분을 256단계로 표현, 16,777,216 색상 표현 가능

흑백사진으로 변환
import cv2
src = cv2.imread('example_512.png')
# RGB 이미지를 그레이스케일로 변환합니다.
gray_img = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
cv2.imshow('src', src)
cv2.imshow('gray_img', gray_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

RGB, CMYK

HSL, HSV, HSB, HSI
-> Hue(색상): 어떤 색인지 결정 0~360도 벙위
-> Saturation(채도): 색의 강력함 또는 순도, 높은 채도는 색이 더 선명하고 순수함, 낮은 채도는 색이 더 흐림 0~100%로 표현

RGB를 HSV로 변환
import cv2
src = cv2.imread('example_512.png')
# RGB 이미지를 HSV로 변환합니다.
hsv_img = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
cv2.imshow('src', src)
cv2.imshow('hsv_img', hsv_img)
cv2.waitKey(0)
cv2.destroyAllWindows()


import numpy as np
import cv2
src = cv2.imread('이미지.png')
src_hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
src_blue = cv2.inRange(src_hsv, (110, 0, 0), (130, 255, 255))
cv2.imshow('src', src)
cv2.imshow('src_blue', src_blue)
cv2.waitKey()
cv2.destroyAllWindows()

-> 파란색 부분은 밝게, 파란색 성분이 없는 곳은 어둡게 표현 됨
이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다