OpenCV 는 윤곽 길이/둘레 와 면적 을 계산한다.

3103 단어 OpenCV둘레면적
본 논문 의 사례 는 OpenCV 가 윤곽 의 길이/둘레 와 면적 을 계산 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
윤곽 면적
윤곽 면적 은 각 윤곽 의 모든 픽 셀 점 이 구역 으로 둘러싸 인 면적 을 말 하 며 단 위 는 픽 셀 이다.

double contourArea( InputArray contour, bool oriented = false );
윤곽 의 픽 셀 점
  • oriented:지역 면적 이 방향 성 을 가 진 표지 가 있 는 지,true 는 면적 이 방향 성 을 가 진 다 는 것 을 나타 내 고 false 는 방향 성 을 가지 지 않 는 다 는 것 을 나타 내 며 기본 값 은 방향 성 을 가지 지 않 는 false 이다
  • 함수 의 반환 값 은 윤곽 면적 을 통계 한 결과 이 고 데이터 형식 은 double 입 니 다.함수 의 첫 번 째 매개 변 수 는 윤곽 의 픽 셀 점 을 나타 내 고 데이터 형식 은 vector 또는 Mat 이 며 인접 한 두 픽 셀 점 사이 에 하나씩 연결 되 어 구 성 된 다각형 구역 은 윤곽 면적 의 통계 구역 입 니 다.연속 적 인 세 개의 픽 셀 점 사이 의 연결선 은 같은 직선 에 있 을 수 있 기 때문에 윤곽 픽 셀 점 을 입력 하 는 수 를 줄 이기 위해 윤곽 의 정점 픽 셀 점 만 입력 할 수 있다.예 를 들 어 삼각형 의 윤곽,윤곽 에는 각 변 의 모든 픽 셀 점 이 있 을 수 있 지만 면적 을 통계 할 때 삼각형 의 세 개의 정점 만 입력 할 수 있다.함수 두 번 째 매개 변 수 는 지역 면적 이 방향 을 가 진 표지 인지,매개 변 수 는 true 일 때 통계 의 면적 이 방향 성 을 가 진 다 는 것 을 나타 내 고 윤곽 의 정점 은 시계 방향 으로 제시 하고 시계 반대 방향 으로 제시 할 때 통계 하 는 면적 은 서로 반대 수 이다.매개 변수 가 false 일 때 통계 의 면적 이 방향 성 을 가지 지 않 고 출력 윤곽 면적 의 절대 치 를 나타 낸다. 
    윤곽 길이 /둘레
    
    double arcLength( InputArray curve, bool closed );
  • curve:윤곽 이나 곡선의 2D 픽 셀 점
  • 4.567917.closed:윤곽 이나 곡선 이 닫 힌 표지 인지,true 는 닫 힌 것 을 나타 낸다.
    이 함 수 는 윤곽 이나 곡선의 길 이 를 통계 할 수 있 으 며 함수 반환 값 은 통계 길이 이 고 단 위 는 픽 셀 이 며 데이터 형식 은 double 입 니 다.함수 의 첫 번 째 매개 변 수 는 윤곽 이나 곡선의 2D 픽 셀 점 이 고 데이터 형식 은 vector 또는 Mat 입 니 다.함수 의 두 번 째 매개 변 수 는 윤곽 이나 곡선 이 닫 혔 는 지 의 표지 이 고 true 는 닫 혔 음 을 나타 낸다.
    함수 통계 의 길 이 는 윤곽 이나 곡선 이 두 픽 셀 점 과 인접 한 연결선 의 거리 이다.예 를 들 어 삼각형 의 세 개의 정점 A,B 와 C 로 구 성 된 윤곽 길 이 를 계산 할 때 함수 의 두 번 째 매개 변 수 는 true 일 때 통계 의 길 이 는 삼각형 의 세 개의 변 AB,BC 와 CA 의 길이 의 합 이다.매개 변수 가 false 일 때 통계 의 길 이 는 A 에서 C 세 점 사이 에 순서대로 연 결 된 거리 길이 의 합,즉 AB 와 BC 의 길이 의 합 이다.
    단순 예시
    
    //
    // 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);
        drawContours(im, contours, -1, Scalar(255, 0, 255));
     
        for (int i = 0; i < contours.size(); ++i) {
            double area = contourArea(contours[i]);
            double length = arcLength(contours[i], true);
            cout << "area: " << area << " " << "length: " << length << endl;
        }
        
        imshow("im", im);
     
        waitKey(0);
        destroyAllWindows();
     
        return 0;
     
    }

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

    좋은 웹페이지 즐겨찾기