OpenCV

OpenCV Python 고급 활용 강좌 소스 코드 1

지구빵집 2023. 12. 5. 11:17
반응형

 

 

파이선 OpenCV 기본 과정 강의 파일입니다. 세상의 모든 기술은 배울 수 있습니다.

 

OpenCV(Open Source Computer Vision)는 영상처리, 컴퓨터 비전, 비디오 처리, 기계학습(흔히 인공지능이라고 알고 있는) 학습에 관한 라이브러리입니다. 사람이 눈을 통해 물체를 인지하는 것처럼 컴퓨터가 카메라를 통해 물체를 인지하는 방법에 대해 연구하는 분야입니다. 

 

공장에서 제품을 검사하거나 의료 영상 처리 및 보정, 판단, CCTV영상, 로보틱스 등 다양한 범위에서 사용되고 있습니다. 카메라로 찍어서 할 수 있는 모든 일은 OpenCV로 처리할 수 있고, 여기에 머신 러닝과 A.I를 활용해서 그 활용도를 더욱 넓혀가고 있는 중이죠.  

 

OpenCV가 더욱 인기 있는 이유는 오픈소스이지만 BSD(Berkely Software Distribution) 라이선스를 따르기 때문에, 상업적 목적으로 사용이 가능합니다. 그리고 개발한 소스코드의 공개 의무가 없다는 점에서 강점을 가지고 있습니다. OpenCV의 기원은 인텔에서부터 시작되는데, 컴퓨터 비전과 인공지능의 발달시키고자 하는 바람으로 OpenCV를 출시한 것입니다. (with Grary Bradski)

 

OpenCV는 실시간 처리에 중점을 두고 설계돼서 빠른 속도와 효율성을 자랑합니다. 기반 언어는 C++로 멀티 코어 프로세서를 활용할 수 있으며, 심지어 인텔 IPP(Integrated Performance Primitives)를 통한 최적화 루틴을 활용함으로써 로우 레벨에서 자동화된 최적화를 사용할 수 있습니다. 이전에는 유료로 구매해야 했지만, OpenCV 3.0부터는 IPP의 일부를 무료로 제공해주고 있습니다.  

 

강의에 사용한 코드의 출처는 "윤대희 기술 블로그"사이트임을 알려둡니다.

 

카메라 출력

 

import cv2

capture = cv2.VideoCapture(0)
capture.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

while cv2.waitKey(33) < 0:
    ret, frame = capture.read()
    cv2.imshow("VideoFrame", frame)

capture.release()
cv2.destroyAllWindows()

 

 

이미지 출력

 

import cv2

image = cv2.imread("Image/lunar.jpg", cv2.IMREAD_ANYCOLOR)
cv2.imshow("Moon", image)
cv2.waitKey()
cv2.destroyAllWindows()

 

 

비디오 출력

 

import cv2

capture = cv2.VideoCapture("Image/Star.mp4")

while cv2.waitKey(33) < 0:
    if capture.get(cv2.CAP_PROP_POS_FRAMES) == capture.get(cv2.CAP_PROP_FRAME_COUNT):
        capture.set(cv2.CAP_PROP_POS_FRAMES, 0)

    ret, frame = capture.read()
    cv2.imshow("VideoFrame", frame)

capture.release()
cv2.destroyAllWindows()

 

 

대칭

 

import cv2

src = cv2.imread("Image/glass.jpg", cv2.IMREAD_COLOR)
dst = cv2.flip(src, 0)

cv2.imshow("src", src)
cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()

 

회전

 

import cv2

src = cv2.imread("Image/ara.jpg", cv2.IMREAD_COLOR)

height, width, channel = src.shape
matrix = cv2.getRotationMatrix2D((width/2, height/2), 90, 1)
dst = cv2.warpAffine(src, matrix, (width, height))

cv2.imshow("src", src)
cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()

 

 

확대 혹은 축소

 

import cv2

src = cv2.imread("Image/fruits.jpg", cv2.IMREAD_COLOR)
height, width, channel = src.shape

dst = cv2.pyrUp(src, dstsize=(width * 2, height * 2), borderType=cv2.BORDER_DEFAULT)
dst2 = cv2.pyrDown(src)

cv2.imshow("src", src)
cv2.imshow("dst", dst)
cv2.imshow("dst2", dst2)
cv2.waitKey()
cv2.destroyAllWindows()

 

크기 조절

 

import cv2

src = cv2.imread("Image/champagne.jpg", cv2.IMREAD_COLOR)

dst = cv2.resize(src, dsize=(640, 480), interpolation=cv2.INTER_AREA)
dst2 = cv2.resize(src, dsize=(0, 0), fx=0.3, fy=0.7, interpolation=cv2.INTER_LINEAR)

cv2.imshow("src", src)
cv2.imshow("dst", dst)
cv2.imshow("dst2", dst2)
cv2.waitKey()
cv2.destroyAllWindows()

 

자르기

 

import cv2

src = cv2.imread("apple.jpg", cv2.IMREAD_COLOR)
dst = src[100:600, 200:700].copy()

cv2.imshow("src", src)
cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()

 

색상 공간 변환

 

import cv2

src = cv2.imread("Image/crow.jpg", cv2.IMREAD_COLOR)
dst = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)

cv2.imshow("src", src)
cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()

 

역상

 

import cv2

src = cv2.imread("Image/whitebutterfly.jpg", cv2.IMREAD_COLOR)
dst = cv2.bitwise_not(src)

cv2.imshow("src", src)
cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()

 

이진화

 

import cv2

src = cv2.imread("Image/geese.jpg", cv2.IMREAD_COLOR)

gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
ret, dst = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY)

cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()

 

흐림 효과

 

import cv2

src = cv2.imread("Image/geese.jpg", cv2.IMREAD_COLOR)
dst = cv2.blur(src, (9, 9), anchor=(-1, -1), borderType=cv2.BORDER_DEFAULT)

cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()

 

가장자리 검출

 

import cv2

src = cv2.imread("Image/wheat.jpg", cv2.IMREAD_COLOR)
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)

sobel = cv2.Sobel(gray, cv2.CV_8U, 1, 0, 3)
laplacian = cv2.Laplacian(gray, cv2.CV_8U, ksize=3)
canny = cv2.Canny(src, 100, 255)

cv2.imshow("sobel", sobel)
cv2.imshow("laplacian", laplacian)
cv2.imshow("canny", canny)
cv2.waitKey()
cv2.destroyAllWindows()

 

 

HSV 색상 공간

 

import cv2

src = cv2.imread("Image/tomato.jpg", cv2.IMREAD_COLOR)
hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)

cv2.imshow("h", h)
cv2.imshow("s", s)
cv2.imshow("v", v)
cv2.waitKey()
cv2.destroyAllWindows()

 

 

 

 

반응형