AI 그게 뭔데
끄적끄적 개발일지
AI 그게 뭔데
전체 방문자
오늘
어제
  • 분류 전체보기 (342)
    • 논문 (5)
    • DL(Deep-Learning) (34)
      • 개념 (14)
      • Python 기초 (14)
      • Tensorflow (6)
      • Pytorch (0)
    • NLP (10)
    • OpenCV (53)
    • DevOps (10)
      • AWS (2)
      • Docker & Kubernetes (4)
      • Spark (3)
      • SQL (1)
    • MacOS (1)
    • React-Native (2)
    • BI (3)
      • GA(Google Analytics) (3)
      • Tableau (0)
    • 알고리즘 (221)
      • 백준 (76)
      • 프로그래머스 (108)
      • 기타 알고리즘 (37)

인기 글

태그

  • level1
  • 연습문제
  • 알고리즘
  • LEVEL2
  • OpenCV
  • Python
  • 백준
  • 이코테
  • 파이썬
  • 프로그래머스

최근 글

hELLO · Designed By 정상우.
AI 그게 뭔데

끄적끄적 개발일지

[OpenCV] 기초 2
OpenCV

[OpenCV] 기초 2

2022. 1. 30. 20:36

영상의 속성과 픽셀 값 참조

OpenCV는 영상 데이터를 numpy.ndarray로 표현

 

import cv2

img1 = cv2.imread('cat.bmp', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('cat.bmp', cv2.IMREAD_COLOR)

numpy.ndarray

  • ndim : 차원 수
  • shape : 각 차원의 크기
      -  그레이스케일 : (h, w)
      -  컬러 : (h, w, 3)
  • size : 전체 원소 개수
  • dtype : 원소의 데이터 타입. 영상 데이터는 unit8

 

 

OpenCV 영상 데이터 자료형과 NumPy 자료형

OpenCV 자료형 (1채널) NumPy 자료형 구분
cv2.CV_8U numpy.uint8 8비트 부호없는 정수
cv2.CV_8S numpy.int8 8비트 부호있는 정수
cv2.CV_16U numpy.uint16 16비트 부호없는 정수
cv2.CV_16S numpy.int16 16비트 부호있는 정수
cv2.CV_32S numpy.int32 32비트 부호있는 정수
cv2.CV_32F numpy.float32 32비트 부동소수형
cv2.CV_64F numpy.float64 64비트 부동소수형
cv2.CV_16F numpy.float16 16비트 부동소수형
  • 그레이스케일 영상 : cv2.CV_8UC1 ⇨ numpy.uint8, shape = (h, w)  
  • 컬러 영상 : cv2.CV_8UC3 ⇨  numpy.uint8, shape = (h, w, 3)

 

 

✔︎  영상의 속성 참조

import sys
import cv2

# 영상 불러오기
img1 = cv2.imread('cat.bmp', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('cat.bmp', cv2.IMREAD_COLOR)

if img1 is None or img2 is None:
    print('Image load failed!')
    sys.exit()

# 영상의 속성 참조
print('type(img1):', type(img1))
print('img1.shape:', img1.shape)
print('img2.shape:', img2.shape)
print('img1.dtype:', img1.dtype)

# 영상의 크기 참조
h, w = img2.shape[:2]
print('img2 size: {} x {}'.format(w, h))

if len(img1.shape) == 2:
    print('img1 is a grayscale image')
elif len(img1.shape) == 3:
    print('img1 is a truecolor image')

cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.waitKey()

 

 

 

✔︎   영상의 픽셀 값 참조

# 영상의 픽셀 값 참조 (사용하지 않음)
for y in range(h):
    for x in range(w):
        img1[y, x] = 255
        img2[y, x] = (0, 0, 255)        

# 영상의 픽셀 값 참조 (주로 사용하는 방법)
img1[:,:] = 255
img2[:,:] = (0, 0, 255)

cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.waitKey()

cv2.destroyAllWindows()

 

 

 

영상의 생성, 복사, 부분 영상 추출

✔︎  지정한 크기로 새 영상 생성하기

numpy.empty(shape, dtype=float, ...) -> arr  
numpy.zeros(shape, dtype=float, ...) -> arr  
numpy.ones(shape, dtype=None, ...) -> arr  
numpy.full(shape, fill_value, dtype=None, ...) -> arr
  • shape : 각 차원의 크기. (h, w) 또는 (h, w, 3)
  • dtype : 원소의 데이터 타입. 일반적인 영상이면 numpy.uint8
  • arr : 생성된 영상(numpy.ndarray)
  • 참고사항
      -  numpy.empty() 함수는 임의의 값으로 초기화된 배열을 생성
      -  numpy.zeros() 함수는 0으로 초기화된 배열을 생성
      -  numpy.ones() 함수는 1로 초기화된 배열을 생성
      -  numpy.full() 함수는 fill_value로 초기화된 배열을 생성

 

import numpy as np
import cv2

# 새 영상 생성하기
img1 = np.empty((240, 320), dtype=np.uint8)  # grayscale image
img2 = np.zeros((240, 320, 3), dtype=np.uint8)  # color image
img3 = np.ones((240, 320), dtype=np.uint8) * 255  # dark gray
img4 = np.full((240, 320, 3), (0, 255, 255), dtype=np.uint8)  # yellow

cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)
cv2.imshow('img4', img4)
cv2.waitKey()
cv2.destroyAllWindows()

 

 

 

✔︎  영상의 참조 및 복사 예제 코드

# 영상 복사
img1 = cv2.imread('HappyFish.jpg')

img2 = img1
img3 = img1.copy()


cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)
cv2.waitKey()
cv2.destroyAllWindows()

 

 

 

# 영상 복사
img1 = cv2.imread('HappyFish.jpg')

img2 = img1
img3 = img1.copy()

img1.fill(255)

cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)
cv2.waitKey()
cv2.destroyAllWindows()

 

 

 

 

✔︎  부분 영상 추출

# 부분 영상 추출
img1 = cv2.imread('HappyFish.jpg')

img2 = img1[40:120, 30:150]  # numpy.ndarray의 슬라이싱
img3 = img1[40:120, 30:150].copy()

img2.fill(0)

cv2.imshow('img1', img1)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)
cv2.waitKey()
cv2.destroyAllWindows()

 

'OpenCV' 카테고리의 다른 글

[OpenCV] 기초 5 : 키보드 이벤트/ 마우스 이벤트  (0) 2022.01.30
[OpenCV] 기초 4 : 카메라와 동영상 처리  (0) 2022.01.30
[OpenCV] 기초 3 : 마스크 / 그리기 함수  (0) 2022.01.30
[OpenCV] 기초 1 : 주요 함수  (0) 2022.01.30
OpenCV 란?  (1) 2022.01.30
    AI 그게 뭔데
    AI 그게 뭔데
    공부와 개발 그리고 AI가 약간 첨가된 흔적 남기기

    티스토리툴바