우리는 OpenCV의 기초를 배우는 것으로 시작한 다음 이미지에 대한 몇 가지 기본 이미지 처리 및 조작을 수행 한 다음 이미지 분할 및 OpenCV 및 Python 언어를 사용하는 다른 많은 작업을 수행했습니다. 이 섹션에서는 템플릿 매칭을 사용하여 몇 가지 간단한 물체 감지 기술 을 수행 합니다. 이미지에서 물체를 찾은 다음 그 특징을 설명합니다. 특징은 모서리, 가장자리 등과 같은 이미지의 공통 속성입니다. SIFT, SURF, FAST, BREIF 및 ORB 와 같은 일반적이고 널리 사용되는 물체 감지 알고리즘도 살펴볼 것 입니다.
이전 튜토리얼에서 언급 했듯이 OpenCV는 C ++, Python 및 Java 인터페이스가 있고 Windows, Linux, Mac OS, iOS 및 Android를 지원하는 오픈 소스 Commuter Vision Library 입니다. 따라서 Python 및 Linux 환경에서 Raspberry Pi에 쉽게 설치할 수 있습니다. 또한 OpenCV 및 연결된 카메라가있는 Raspberry Pi를 사용하여 얼굴 감지, 얼굴 잠금, 개체 추적, 자동차 번호판 감지, 홈 보안 시스템 등과 같은 많은 실시간 이미지 처리 애플리케이션을 만들 수 있습니다.
물체 감지 및 인식 은 컴퓨터 비전의 가장 중요한 사용 사례이며 다음과 같은 강력한 작업을 수행하는 데 사용됩니다.
- 장면에 레이블 지정
- 로봇 내비게이션
- 자율 주행 차
- 신체 인식 (Microsoft Kinect)
- 질병 및 암 탐지
- 안면 인식
- 필기 인식
- 위성 이미지에서 물체 식별
물체 감지 VS 인식
물체 인식은 컴퓨터가 이미지의 여러 물체에서 물체를 인식하고이를 식별 할 수있는 두 번째 수준의 물체 감지입니다.
이제 이미지에서 객체를 찾기 위해 몇 가지 이미지 처리 기능을 수행합니다.
이미지에서 개체 찾기
여기서는 이미지에서 문자 / 객체를 찾기 위해 템플릿 일치를 사용 하고 해당 객체를 찾기 위해 OpenCV의 cv2.matchTemplate () 함수를 사용합니다.
import cv2 import numpy as np
입력 이미지를로드하고 회색으로 변환
image = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('people', image) cv2.waitKey (0) gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
템플릿 이미지로드
template = cv2.imread ('waldo.jpg', 0) # 이미지에 대한 개체의 템플릿 일치 결과 result = cv2.matchTemplate (gray, template, cv2.TM_CCOEFF) sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc (결과)
경계 상자 만들기
top_left = max_loc # 경계 사각형의 크기를 50 픽셀 늘리기 bottom_right = (top_left + 50, top_left + 50) cv2.rectangle (image, top_left, bottom_right, (0,255,0), 5) cv2.imshow ('object found', 이미지) cv2.waitKey (0) cv2.destroyAllWindows ()
에서는 cv2.matchTemplate (회색, 템플릿 cv2.TM_CCOEFF) , 그레이 스케일 이미지 입력 물체와 템플릿을 검색한다. 그런 다음 이미지에서 개체를 찾기 위해 템플릿 일치 방법을 적용합니다. 여기서는 cv2.TM_CCOEFF 가 사용됩니다.
전체 함수는 템플릿 매칭 절차의 결과 인 결과에 입력 된 배열을 반환합니다.
그런 다음 cv2.minMaxLoc (result)를 사용 하여 이미지에서 객체가 발견 된 좌표 또는 경계 상자를 제공하고 해당 좌표를 얻으면 그 위에 직사각형을 그리고 상자의 작은 치수를 늘립니다. 개체는 직사각형 안에 쉽게 들어갈 수 있습니다.
템플릿 매칭을 수행하는 방법은 다양 하며이 경우 상관 계수를 나타내는 cv2.TM_CCOEFF 를 사용 합니다.
여기서 키포인트는 sift 검출기를 사용하여 추출하고 cv2 키포인트 그리기 기능을 사용하여 이미지 위에 그린 (X, Y) 좌표입니다.
서핑
import cv2 import numpy as np image = cv2.imread ('paris.jpg') gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
SURF Feature Detector 개체를 만듭니다. 여기서 헤 시안 임계 값을 500으로 설정합니다.
surf = cv2.xfeatures2d.SURF_create (500) 키포인트, 설명자 = surf.detectAndCompute (gray, None) print ("감지 된 키포인트 수:", len (키포인트))
입력 이미지에 풍부한 키 포인트 그리기
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method-SURF', image) cv2.waitKey () cv2.destroyAllWindows ()
콘솔 출력:
빠른
import cv2 import numpy as np image = cv2.imread ('paris.jpg') gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
FAST Detector 개체 만들기
fast = cv2.FastFeatureDetector_create () # 키 포인트 가져 오기, 기본적으로 비 최대 억제는 해제하려면 On # set fast.setBool ('nonmaxSuppression', False) keypoints = fast.detect (gray, None) print ("키포인트 수 감지 됨: ", len (키포인트))
입력 이미지에 풍부한 키포인트 그리기
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method-FAST', image) cv2.waitKey () cv2.destroyAllWindows ()
콘솔 출력:
간결한
import cv2 import numpy as np image = cv2.imread ('paris.jpg') gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
FAST 감지기 개체 만들기
brief = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
BRIEF 추출기 객체 만들기
#brief = cv2.DescriptorExtractor_create ("BRIEF") # 핵심 포인트 결정 keypoints = fast.detect (gray, None)
BRIEF를 사용하여 설명자 및 새로운 최종 키포인트 얻기
keypoints, descriptors = brief.compute (gray, keypoints) print ("감지 된 키포인트 수:", len (키포인트))
입력 이미지에 풍부한 키포인트 그리기
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method-BRIEF', image) cv2.waitKey () cv2.destroyAllWindows ()
콘솔 출력:
구
import cv2 import numpy as np image = cv2.imread ('paris.jpg') gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
ORB 객체를 만들고 원하는 키 포인트 수를 지정할 수 있습니다.
orb = cv2.ORB_create () # 핵심 포인트 결정 keypoints = orb.detect (gray, None)
설명자 확보
keypoints, descriptors = orb.compute (gray, keypoints) print ("감지 된 키포인트 수:", len (키포인트))
입력 이미지에 풍부한 키포인트 그리기
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method-ORB', image) cv2.waitKey () cv2.destroyAllWindows ()
콘솔 출력:
최대 5000 개의 키포인트 수를 지정할 수 있지만 기본값은 500입니다. 즉, ORB는 키포인트 값에 대해 지정되지 않은 경우 자동으로 최상의 500 개의 키포인트를 감지합니다.
따라서 이것이 OpenCV에서 물체 감지가 이루어지는 방식이며, 동일한 프로그램을 OpenCV에 설치된 Raspberry Pi에서도 실행할 수 있으며 Google 렌즈가있는 스마트 폰과 같은 휴대용 장치로 사용할 수 있습니다.
이 기사는 Rajeev Ratan이 만든 Udemy의 Deep Learning 과정이 포함 된 Python의 Master Computer Vision ™ OpenCV4에서 참조되었으며, 구독하여 Computer Vision 및 Python에 대해 자세히 알아보십시오.