OpenCV

OpenCV 파이선 강의 실습 코드 2

지구빵집 2023. 11. 22. 17:36
반응형

 

강의 슬라이드 p.139 - OpenCV 이미지 생성 변환 및 접근 

 

512x256 크기의 흰색 컬러 영상, 검정색 컬러 영상, 흰색 회색조 영상, 검정색 회색조 영상을 생성  

 

import cv2
import numpy as np

cw_image = np.ones((256, 512, 3), np.uint8) * 255
cb_image = np.zeros((256, 512, 3), np.uint8)

gw_image = np.ones((256, 512, 1), dtype = np.uint8)*255
gb_image = np.zeros((256, 512, 1), dtype = np.uint8)

# 위와 동일한 코드
gw_image = np.ones((256, 512), dtype = np.uint8)*255
gb_image = np.zeros((256, 512), dtype = np.uint8)

cv2.imshow('Color white image', cw_image)
cv2.imshow('Color black image', cb_image)
cv2.imshow('Gray white image', gw_image)
cv2.imshow('Gray black image', gb_image)

cv2.waitKey(0)
cv2.destroyAllWindows()

 

 

512x512 크기의 영상을 읽어들인 후에 새로운 영상 변수에 할당하고 새로운 영상 변수를 조작한 결과를 출력  

 

import cv2
import numpy as np

org_image = cv2.imread('figures100.jpg', cv2.IMREAD_UNCHANGED)
copy_image = org_image

copy_image[150:350, 150:350] = (255, 0, 0)

cv2.imshow('Org image', org_image)
cv2.imshow('Cpy image', copy_image)

cv2.waitKey(0)
cv2.destroyAllWindows()

 

 

영상 내용 복사 함수

 

import cv2
import numpy as np

org_image = cv2.imread('figures100.jpg', cv2.IMREAD_UNCHANGED)
copy_image = org_image.copy() #copy 함수 호출

copy_image[150:350, 150:350] = (255, 0, 0)

cv2.imshow('Org image', org_image)
cv2.imshow('Cpy image', copy_image)

cv2.waitKey(0)
cv2.destroyAllWindows()

 

영상 데이터 정보 - shape, size, 데이터 타입

 

import cv2
import numpy as np

c_image = cv2.imread('figures100.jpg', cv2.IMREAD_UNCHANGED)
g_image = cv2.imread('figures-gray.jpg', cv2.IMREAD_UNCHANGED)

print('shape')
print('color = {}, Gray = {}'.format(c_image.shape, g_image.shape))
print('size')
print('color = {}, Gray = {}'.format(c_image.size, g_image.size))
print('Data Type')
print('color = {}, Gray = {}'.format(c_image.dtype, g_image.dtype))

 

 

컬러 영상을 개별적인 채널로 분리하거나, 개별적인 채널을 합성하기 위한 기본적인 코드  

 

c_image = cv2.imread('figures100.jpg', cv2.IMREAD_UNCHANGED)

#분리
(b, g, r) = cv2.split(c_image)

#합병
m_image = cv2.merge((r, g, b))

cv2.imshow('origin', c_image)
cv2.imshow('Modified', m_image)


cv2.waitKey(0)

 

 

BGR 모델의 컬러 영상을 Grayscale 모델의 회색조 영상으로 변환하여 출력, HSV 모델의 컬러 영상으로 변환한 후에 Hue, Saturation, Value의 각 채널 별로 출력 코드  

 

import cv2

bgr_image = cv2.imread('figures100.jpg', cv2.IMREAD_UNCHANGED)

gray_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2GRAY)
hsv_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2HSV)

cv2.imshow('origin', bgr_image)
cv2.imshow('Modified', gray_image)

cv2.imshow('H image', hsv_image[:,:,0]) #hue
cv2.imshow('S image', hsv_image[:,:,1]) #saturatiom
cv2.imshow('V image', hsv_image[:,:,2]) #Value

cv2.waitKey(0)

 

 

512x256 크기 컬러 및 흑백 영상을 읽어서 행렬의 크기 정보를 출력  

 

import cv2

c_image = cv2.imread('figures100.jpg', cv2.IMREAD_UNCHANGED)
g_image = cv2.imread('figures-gray.jpg', cv2.IMREAD_UNCHANGED)

print('Color image', c_image.shape)
print('Gray image', g_image.shape)

cv2.imshow("Color image", c_image)
cv2.imshow("Gray image", g_image)

cv2.waitKey(0)

 

 

컬러 및 흑백 영상 데이터 사이의 변환  

 

import cv2

bgr_image = cv2.imread('figures100.jpg', cv2.IMREAD_UNCHANGED)

gray_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2GRAY)

print('Bgr image', bgr_image.shape)
print('Gray image', gray_image.shape)

cv2.imshow("Color image", bgr_image)
cv2.imshow("Gray image", gray_image)

cv2.waitKey(0)

 

 

 

컬러 영상 접근 : 3차원 행렬을 갖는 컬러 영상에 대하여 특정한 픽셀값 을 출력하고, 픽셀값을 직접 변경  

 

import cv2
import numpy as np

c_image = cv2.imread('figures100.jpg', cv2.IMREAD_UNCHANGED)

(hit, wth, ch) = c_image.shape
pix = c_image[100, 200]
b = c_image[100, 200, 0]
g = c_image[100, 200, 1]
r = c_image[100, 200, 2]

print('Pixel {}, B = {} G = {} R = {}'.format(pix, b, g, r))

for i in range(wth):
    c_image[hit//2, i] = [255, 0, 0]
    c_image[hit//4, i, 0] = 0
    c_image[hit//4, i, 1] = 0
    c_image[hit//4, i, 2] = 255

c_image.itemset((100, 200, 1), 99)
print('Numpy value =', c_image.item(100, 200, 1))

cv2.imshow("color image", c_image)
cv2.waitKey(0)

 

 

회색조 영상 접근 : 2차원 행렬의 회색조 영상에 대하여 특정한 픽셀값 을 출력하고, 픽셀값을 직접 변경  

itemset - 이미지를 저장하기 전에는 실제로 바꾸지 않음.

 

import cv2
import numpy as np

g_image = cv2.imread('figures-gray.jpg', cv2.IMREAD_UNCHANGED)

(hit, wth) = g_image.shape
pix = g_image[100, 200]
g = g_image[100, 200]

print('Pixel {}, Gray = {}'.format(pix, g))

for i in range(wth):
    g_image[hit//2, i] = 255
    g_image[hit//4, i] = 0

g_image.itemset((100, 200), 99)
print('Numpy value =', g_image.item(100, 200))

cv2.imshow("Gray image", g_image)
cv2.waitKey(0)

 

 

이미지 픽셀 접근 : 컬러 및 회색조 영상 

배열 슬라이싱 통해서 접근 가능 [시작:끝 범위]  

 

import cv2

c_image = cv2.imread('figures100.jpg', cv2.IMREAD_UNCHANGED)
g_image = cv2.imread('figures-gray.jpg', cv2.IMREAD_UNCHANGED)

c_image[100:150, 200:300] = (0,0,255)
g_image[100:150, 200:300] = 255

cv2.imshow("Color image", c_image)
cv2.imshow("Gray image", g_image)
cv2.waitKey(0)

 

 

OpenCV 라이브러리는 영상에 점, 선, 사각형, 원과 같은 기본 도형을 그리거나 글자를 쓰기 위한 기능을 지원  

 

import cv2
import numpy as np

image = np.ones((512, 512, 3), np.uint8) * 255

image = cv2.line(image, (0, 0), (511, 511), (255, 0, 0), 2)
image = cv2.arrowedLine(image, (511, 0), (256,256), (0, 0, 255), 2)

cv2.imshow("Color image", image)
cv2.waitKey(0)

 

 

512x512 크기의 영상에 사각형을 그리는 코드  

 

import cv2
import numpy as np

image = np.ones((512, 512, 3), np.uint8) * 255

image = cv2.rectangle(image, (100, 100), (411, 411), (255, 0, 0), 2)
image = cv2.rectangle(image, (200, 200), (311, 291), (0, 255, 0), -1)

cv2.imshow("Color image", image)
cv2.waitKey(0)

 

 

512x512 크기의 영상에 원을 그리는 코드  

 

import cv2
import numpy as np

image = np.ones((512, 512, 3), np.uint8) * 255

image = cv2.circle(image, (255, 255), 128, (255, 0, 0), 2)
image = cv2.circle(image, (255, 255), 64, (0, 255, 0), -1)

cv2.imshow("Color image", image)
cv2.waitKey(0)

 

 

512x512 크기의 영상에 타원을 그리는 코드  

 

import cv2
import numpy as np

image = np.ones((512, 512, 3), np.uint8) * 255

#하단 타원
image = cv2.ellipse(image, (255, 255), (200, 100), 0, 0, 180, (0, 0, 255), 2)
# 상단 타원
image = cv2.ellipse(image, (255, 255), (100, 50), 0, 180, 360, (255, 0, 0), -1)

cv2.imshow("Color image", image)
cv2.waitKey(0)

 

 

512x512 크기의 영상에 다각형을 그리는 코드  

 

import cv2
import numpy as np

image = np.ones((512, 512, 3), np.uint8) * 255

#각 정점을 2차우너 행렬로 선언
pts = np.array([[100, 50], [200, 300], [420, 200], [500, 100]], np.int32)

# 이미지에 표현하기 위해 3차원 행렬로 변환(-1은 원본 해당 값을 그대로 유지)
pts = pts.reshape((-1, 1, 2))

image = cv2.polylines(image, [pts], False, (255, 0, 0), 2)
#image = cv2.polylines(image, [pts], True, (255, 0, 0), 2)

cv2.imshow("Color image", image)
cv2.waitKey(0)

 

 

512x512 크기의 영상에 글자를 쓰는 코드  

 

import cv2
import numpy as np

image = np.ones((512, 512, 3), np.uint8) * 255

image = cv2.putText(image, "Hello OpenCv", (10, 100), cv2.FONT_HERSHEY_PLAIN, 4, (255, 0, 0))
image = cv2.putText(image, "Hello OpenCv", (10, 200), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
image = cv2.putText(image, "Hello OpenCv", (10, 300), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 255, 0), 4)

cv2.imshow("Color image", image)
cv2.waitKey(0)

 

 

 

 

 

반응형