OpenCV 윤곽 검사 및 그리 기
구조 관 계 를 가 진 가장자리 검 측 은 이러한 구조 관 계 는 이미지 의 연결 영역 이나 일부 지역 간 의 관 계 를 나 타 낼 수 있다.
그림 은 4 개의 연결 되 지 않 는 가장 자 리 를 가 진 이치 화 이미지 로 밖에서 안 으로 0 번,1 번,2 번,3 번 가장자리 로 나 뉜 다.서로 다른 윤곽 간 의 구조 관 계 를 묘사 하기 위해 정 의 는 밖에서 안 으로 의 윤곽 등급 이 점점 낮 아 지고 있다.즉,높 은 등급 의 윤곽 이 비교적 낮은 등급 의 윤곽 을 둘러싸 고 같은 윤곽 에 둘러싸 인 여러 개의 서로 포함 되 지 않 는 윤곽 은 같은 등급 의 윤곽 이다.예 를 들 어 그림 에서 0 번 윤곽 의 등급 은 1 번 과 2 번 윤곽 의 층 과 모두 높 고 2 번 윤곽 은 3 번 윤곽 을 둘러싸 기 때문에 2 번 윤곽 의 등급 은 3 번 윤곽 보다 높다.
4 개의 매개 변 수 를 사용 하여 서로 다른 등급 간 의 구조 관 계 를 묘사 합 니 다.같은 층 의 다음 윤곽 색인,같은 층 의 위의 윤곽 색인,다음 층 의 첫 번 째 키 윤곽 색인 과 상부 의 윤곽 색인 입 니 다.
위의 그림 에서 0 번 윤곽 은 동급 윤곽 과 부모 윤곽 이 없 으 므 로-1 로 표시 해 야 하 며 첫 번 째 키 윤곽 은 1 번 윤곽 이 므 로 이 윤곽 의 구 조 를 묘사 할 수 있다.1 번 윤곽 의 다음 동급 윤곽 은 2 번 윤곽 이지 만 이전 동급 윤곽 은 없다.-1 로 부모 윤곽 은 0 번 윤곽 이 고 첫 번 째 키 윤곽 은 3 번 윤곽 이 므 로 이 윤곽 구 조 를 묘사 할 수 있다.2 번 윤곽 과 3 번 윤곽 역시 이런 방식 으로 구조 관계 설명 자 를 구축 할 수 있다.그림 에서 서로 다른 윤곽 간 의 등급 관 계 는 그림 으로 표시 할 수 있다.
2 값 그림 에서 그림 의 모든 윤곽 을 감지 하고 서로 다른 윤곽 구조 관계 설명 자 를 생 성 합 니 다.
void findContours( InputOutputArray image, OutputArrayOfArrays contours,
OutputArray hierarchy, int mode,
int method, Point offset = Point());
함수 의 첫 번 째 매개 변 수 는 검 측 대상 윤곽 의 입력 이미지 입 니 다.이론 적 으로 이미지 윤곽 을 검 측 하려 면 이치 화 이미지 가 필요 합 니 다.그러나 이 함 수 는 0 픽 셀 이 아 닌 1,0 픽 셀 에 변 하지 않 기 때문에 이 매개 변 수 는 비 이치 화 된 그 레이스 케 일 이미 지 를 받 아들 일 수 있 습 니 다.이 함수 의 기본 이치 화 작업 은 이미지 의 주요 내용 을 유지 할 수 없 기 때문에 그림 을 미리 처리 해 야 합 니 다.threshold()함수 나 adaptiveThreshold()함 수 를 이용 하여 수요 에 따라 이치 화 합 니 다.
두 번 째 매개 변 수 는 검 측 된 윤곽 을 저장 하 는 데 사 용 됩 니 다.데이터 형식 은 vector 이 고 모든 윤곽 에는 이 윤곽 에 속 하 는 픽 셀 좌표 가 저장 되 어 있 습 니 다.
함수 의 세 번 째 매개 변 수 는 각 윤곽 간 의 구조 정 보 를 저장 하 는 데 사 용 됩 니 다.데이터 형식 은 vector 입 니 다.데이터 의 크기 는 검 측 된 윤곽 수량 과 같 습 니 다.각 윤곽 구조 정보 에서 첫 번 째 데 이 터 는 같은 층 의 다음 윤곽 색인 을 표시 하고 두 번 째 데 이 터 는 같은 층 의 이전 윤곽 색인 을 표시 하 며 세 번 째 데 이 터 는 다음 층 의 첫 번 째 윤곽 색인 을 표시 합 니 다.네 번 째 데 이 터 는 상부 의 윤곽 색인 을 나타 낸다.
함수 네 번 째 매개 변 수 는 윤곽 검사 모델 의 표지 로 선택 할 수 있 는 매개 변수 와 의 미 는 표 7-2 에서 제시 합 니 다.
함수 다섯 번 째 매개 변 수 는 윤곽 접근 방법 을 선택 한 표지 로 선택 할 수 있 는 매개 변수 와 의 미 는 표 7-3 에서 제시 합 니 다.
함수 의 마지막 매개 변 수 는 모든 윤곽 점 이 이동 하 는 선택 가능 한 오프셋 입 니 다.이 함 수 는 ROI 이미지 에서 윤곽 을 찾아내 고 전체 이미지 로 윤곽 을 분석 하 는 장면 에 주로 사 용 됩 니 다.
이미지 의 윤곽 만 검사 하고 윤곽 간 의 구조 관계 정보 에 관심 이 없다.
void findContours( InputOutputArray image, OutputArrayOfArrays contours,
int mode, int method, Point offset = Point());
void drawContours( InputOutputArray image, InputArrayOfArrays contours,
int contourIdx, const Scalar& color,
int thickness = 1, int lineType = LINE_8,
InputArray hierarchy = noArray(),
int maxLevel = INT_MAX, Point offset = Point() );
함수 의 첫 번 째 매개 변 수 는 윤곽 을 그 리 는 그림 입 니 다.필요 에 따라 이 매개 변 수 는 단일 채널 의 그 레이스 케 일 이미지 나 3 채널 의 컬러 이미지 일 수 있 습 니 다.
두 번 째 매개 변 수 는 그 릴 윤곽 이 고 데이터 형식 은 vector 입 니 다.
세 번 째 매개 변 수 는 그 릴 윤곽 수 입 니 다.이 매개 변 수 는 두 번 째 매개 변수 와 대응 되 며 모든 윤곽 의 수 보다 작 아야 합 니 다.이 매개 변수 값 이 마이너스 라면 모든 윤곽 을 그립 니 다.
네 번 째 매개 변 수 는 윤곽 을 그 리 는 색 입 니 다.단일 채널 의 그 레이스 케 일 이미지 에 대해 서 는 Scalar(x)로 값 을 부여 하고,3 채널 의 컬러 이미지 에 대해 서 는 Scalar(x,y,z)로 값 을 부여 합 니 다.
다섯 번 째 매개 변 수 는 경계선 의 연결 유형 입 니 다.선택 할 수 있 는 매개 변 수 는 표 7-4 에서 보 여 줍 니 다.기본 매개 변 수 는 LINE 입 니 다.8。
여섯 번 째 매개 변 수 는 선택 할 수 있 는 구조 관계 정보 이 고 기본 값 은 noArray()입 니 다.
일곱 번 째 매개 변 수 는 윤곽 을 그 리 는 최대 등급 을 나타 내 고 매개 변수 값 이 0 이면 지정 한 윤곽 만 그립 니 다.1 이면 이 함수 가 윤곽 과 모든 포 함 된 윤곽 을 그립 니 다.2 이면 이 함수 가 윤곽 과 모든 포 함 된 윤곽 과 포 함 된 윤곽 의 윤곽 을 그립 니 다.이 를 통 해 기본 값 은 INT 입 니 다.MAX。함수 의 마지막 매개 변 수 는 선택 할 수 있 는 윤곽 오프셋 매개 변수 로 지정 한 이동 거리 에 따라 모든 윤곽 을 그립 니 다.
단순 예시
//
// Created by smallflyfly on 2021/6/22.
//
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace std;
using namespace cv;
int main() {
Mat im = imread("rice.jfif");
resize(im, im, Size(0, 0), 0.5, 0.5);
Mat gray;
cvtColor(im, gray, CV_BGR2GRAY);
Mat imBin;
threshold(gray, imBin, 125, 255,THRESH_BINARY);
vector<vector<Point>> contours;
findContours(imBin, contours, RETR_EXTERNAL, CHAIN_APPROX_NONE);
vector<Vec4i> hierarchy;
findContours(imBin, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_NONE);
drawContours(im, contours, -1, Scalar(0, 0, 255));
for (auto & i : hierarchy) {
cout << i << endl;
}
imshow("im", im);
waitKey(0);
destroyAllWindows();
return 0;
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Visual Studio 2017에서 OpenCV 템플릿 프로젝트 만들기・Windows 7 Professional 64bit ・Visual Studio 2017 Version 15.9.14 · OpenCV 3.4.1 OpenCV의 도입 방법 등은 아래를 참조하십시오. Visual Stu...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.