본문 바로가기

OpenCV

OpenCV 파이선 강의 실습 코드 2

반응형

 

강의 슬라이드 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)

 

 

 

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

귀사가 성공하기까지의 긴 고난의 시간을 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩