본문 바로가기
파이썬

파이썬 Open CV 관련 패키지 사용법 (기초)

by ㈜㎹Ω∞ 2022. 8. 1.
728x90

Open CV는 Open Source Computer Vision의 약자입니다. 실시간으로 이미지 또는 영상의 프로세싱을 쉽게 할 수 있도록 인텔에서 만든 라이브러리입니다. Open CV를 하기 전에 아래의 4가지 패키지를 다운받습니다.

 

 Open CV 관련 패키지 다운

 

  1. pip install opencv-python
  2. pip install opencv-contrib-python
  3. pip install numpy
  4. pip install matplotlib

 

  • opencv-python : Open CV의 메인 모듈입니다.
  • opencv-contrib-python : contrib모듈(래퍼 패키지)입니다.
  • numpy : 데이터 분석 환경에서 많이 사용되는 행렬 연산을 위한 라이브러리입니다.
  • matplotlib : 도표, 차트, 그래프 등을 구현해주는 그래픽 라이브러리입니다.

 

import cv2
print(cv2.__version__)

 

패키지를 다운받았다면 위의 코드를 입력해서 제대로 실행되는지 확인합니다.

 

이미지

cv.imread(fileName, flag) fileName은 경로이고, flag옵션입니다. flag값은 1,0,-1이 있는데

 

  • 1 : 이미지 파일을 Color로 읽음(기본값)
  • 0 : 이미지 파일을 Gray 스케일로 읽음
  • -1 : alpha channel까지 포함해서 읽음

 

img.shape : 이미지 파일의 모양을 y축(높이), x축(넓이) 채널의 수 값을 확인합니다.

cv.imshow(title, img) : title은 윈도우 창의 제목을 의미합니다.

cv.waitKey() : 특정키를 누를 때까지 기다립니다. 10을 넣으면 10초 동안 기다리지만 0을 넣으면 입력이 있을 때까지 계속 기다립니다.

cv.destroyAllWindows() : 창을 종료합니다.

 

import cv2 as cv

img = cv.imread(r'C:\img\img1.jpg')	# 경로설정
print(img.shape) # shape로 크기 등을 확인
cv.imshow('window_title',img)
cv.waitKey(0)	# 키입력시 창꺼짐
cv.destroyAllWindows()

 

이미지를 Gray 스케일로 처리하면 사물의 경계가 더욱 뚜렷하게 나올 수 있어서 쉽게 인식할 수 있습니다.

 

import cv2 as cv

img = cv.imread(r'C:\img\img1.jpg')
print(img.shape)
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)	# 회색으로 변경
cv.imshow('window_title',img_gray)
cv.waitKey(0)
cv.destroyAllWindows()

 

위에 코드처럼 사용해도 회색으로 나오지만 아래 코드의 img = cv.imread(r'C:\img\img1.jpg',0)처럼 경로 뒤에 0을 표시하면 회색으로 처리됩니다.

 

import cv2 as cv

img = cv.imread(r'C:\img\img1.jpg',0)	# 경로설정, 0
print(img.shape)
cv.imshow('window_title',img)
cv.waitKey(0)
cv.destroyAllWindows()

 

 

이미지 인식하기

 

  • result=cv.matchTemplate(img, a, TM_SQDIFF) : 원하는 이미지를 특정화합니다. img1에서 img2를 어떤 방법으로 찾을지 명령하는 코드입니다. (원본 이미지에서 특정 이미지와 일치하는 영역 찾기) 좌측 상단부터 우측으로 이동하며 계속 비교합니다. return 되는 값은 Gray 이미지로 원본과 얼마나 유사한지 표현. TM_SQDIFF방법을 사용합니다.
  • minVal, maxVal, minLoc, maxLoc = cv.minMaxLoc(result) : 원하는 이미지의 위치를 설정합니다. cv.minMaxLoc(result): result를 최소 포인터, 최대포 인터, 최소 지점, 최대 지점으로 반환합니다. 반환된 값을 minVal, maxVal, minLoc, maxLoc 값에 각각의 변수에 할당합니다.
  • x, y=minLoc : 전체에서 시작하는 지점 찾기, minLoc의 x, y값을 찾습니다.
  • h, w=a.shape : a의 크기를 찾습니다.(높이와 너비를 h, w에 할당) shape=높이, 너비, 채널 수가 표시됩니다.
  • b=cv.rectangle(b, (x, y), (x + w, y + h), (0,0,255), 2) : 사각형을 그리는 옵션입니다. b에 사각형을 그리는데 x, y 위치에서 x에서 w 더한 지점과 y에서 h 더한 지점으로 사각형을 그립니다. (0,0,255)는 색상을 나타냅니다(Blue, Green, Red) 굵기는 2로 표시합니다. ***cv.rectangle(이미지, 사각형 범위, 색상, 굵기)***

 

import cv2 as cv

img = cv.imread(r'C:\img\img2.jpg',0)	# 흑백처리
a = cv.imread(r'C:\img\img1.jpg',0)	# 흑백처리
b = cv.imread(r'C:\img\img2.jpg')	# 컬러처리
result = cv.matchTemplate(img, a, cv.TM_SQDIFF)	# 이미지특정
minVal, maxVal, minLoc, maxLoc = cv.minMaxLoc(result)	# 위치설정
x, y = minLoc
h,w = a.shape
b = cv.rectangle(b, (x, y), (x + w, y + h), (0,0,255), 2)	# 사각형표시
cv.imshow("result", b)	# 이미지보여줌
cv.waitKey(0)	# 키입력시 창꺼짐
cv.destroyAllWindows()	# 창꺼짐

 

흑백사진으로 결과를 받고 컬러사진에 일치하는 영역에 표시합니다.

728x90

댓글