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

'OpenCV' 카테고리의 다른 글
| OpenCV Example 36강 (0) | 2024.06.27 |
|---|---|
| OpenCV Python 고급 활용 강좌 소스 코드 1 (1) | 2023.12.05 |
| OpenCV Python 고급 활용 강좌 소스 코드 4 (0) | 2023.12.05 |
| OpenCV Python 고급 활용 강좌 소스 코드 3 (0) | 2023.12.05 |
| OpenCV Python 고급 활용 강좌 소스 코드 2 (0) | 2023.12.05 |
| OpenCV 파이선 강의 실습 코드 4 (2) | 2023.11.29 |
| OpenCV 파이선 강의 실습 코드 3 (1) | 2023.11.22 |
| OpenCV 파이선 강의 실습 코드 1 (1) | 2023.11.22 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.
귀사가 성공하기까지의 긴 고난의 시간을 캐어랩과 함께 하세요.
캐어랩