OpenCV 윤곽 검사 및 그리 기

7046 단어 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());
  • image:그림 을 입력 하 십시오.데이터 형식 은 CV 입 니 다.8U 의 단일 채널 그 레이스 케 일 이미지 나 이치 화 이미지 입 니 다.
  • contours:검 측 된 윤곽,윤곽 마다 픽 셀 의 좌표 가 저장 되 어 있 습 니 다.
  • hierarchy:윤곽 구조 관계 설명 벡터.
  • mode:윤곽 검 측 모드 표지,선택 할 수 있 는 매개 변 수 는 표 7-2 에 있 습 니 다.
  • method:윤곽 접근 방법 표지,선택 할 수 있 는 매개 변 수 는 표 7-3 에서 제시 합 니 다.
  • offset:윤곽 점 마다 이동 할 수 있 는 선택 적 편 이 량.이 매개 변 수 는 ROI 이미지 에서 윤곽 을 찾아내 고 전체 이미지 로 윤곽 을 분석 하 는 장면 에 주로 사용 된다.
  • 이 함 수 는 주로 이미지 의 윤곽 정 보 를 검사 하고 각 윤곽 간 의 구조 정 보 를 출력 하 는 데 사용 된다.
    함수 의 첫 번 째 매개 변 수 는 검 측 대상 윤곽 의 입력 이미지 입 니 다.이론 적 으로 이미지 윤곽 을 검 측 하려 면 이치 화 이미지 가 필요 합 니 다.그러나 이 함 수 는 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());
  • image:그림 을 입력 하 십시오.데이터 형식 은 CV 입 니 다.8U 의 단일 채널 그 레이스 케 일 이미지 나 이치 화 이미지 입 니 다.
  • contours:검 측 된 윤곽,윤곽 마다 픽 셀 의 좌표 가 저장 되 어 있 습 니 다.
  • mode:윤곽 검 측 모드 표지,선택 할 수 있 는 매개 변 수 는 표 7-2 에 있 습 니 다.
  • method:윤곽 접근 방법 표지,선택 할 수 있 는 매개 변 수 는 표 7-3 에서 제시 합 니 다.
  • offset:윤곽 점 마다 이동 할 수 있 는 선택 적 편 이 량.이 함 수 는 ROI 이미지 에서 윤곽 을 찾아내 고 전체 이미지 로 윤곽 을 분석 하 는 장면 에 주로 사 용 됩 니 다.
  • 윤곽 함수 그리 기:
    
    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() );
  • image:윤곽 을 그 리 는 대상 그림 입 니 다.
  • contours:그 릴 윤곽
  • contourIdx:그 릴 윤곽 의 수,마이너스 라면 모든 윤곽 을 그립 니 다.
  • color:윤곽 을 그 리 는 색 입 니 다.
  • thickness:윤곽 의 선 굵기 를 그립 니 다.매개 변수 가 음수 라면 윤곽 의 내 부 를 그립 니 다.기본 매개 변수 값 은 1 입 니 다.
  • lineType:경계선 연결 의 유형 은 매개 변 수 를 선택 하여 표 7-4 에서 제시 할 수 있 습 니 다.기본 매개 변 수 는 LINE 입 니 다.8。
  • hierarchy:선택 할 수 있 는 구조 관계 정보,기본 값 은 noArray()입 니 다.
  • max Level:윤곽 을 그 리 는 데 사용 되 는 최대 레벨 을 표시 합 니 다.기본 값 은 INT 입 니 다.MAX。
  • offset:선택 할 수 있 는 윤곽 오프셋 매개 변 수 는 지정 한 이동 거리 에 따라 모든 윤곽 을 그립 니 다.
  • 이 함 수 는 findContours()함수 가 감지 한 이미지 윤곽 을 그 리 는 데 사 용 됩 니 다.
    함수 의 첫 번 째 매개 변 수 는 윤곽 을 그 리 는 그림 입 니 다.필요 에 따라 이 매개 변 수 는 단일 채널 의 그 레이스 케 일 이미지 나 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;
     
    }

    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기