OpenCV에서findContours 함수 사용
2876 단어 OpenCV
OpenCV의 함수findContours()는 의 객체 아웃라인에 사용되는 두 가지 형태입니다.
첫 번째:
void findContours( InputOutputArray image, OutputArrayOfArrays contours, int mode, int method, Point offset=Point());
두 번째:
void findContours( InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset=Point());
매개변수:
contours: 찾은 각 윤곽입니다
mode :CV_RETR_EXTERNAL에서 찾은 컨투어에는 작은 컨투어(구멍)가 없습니다. CVRETR_LIST에서 찾은 컨투어에 작은 컨투어를 포함할 수 있습니다.
hierarchy: 차원 구조, 윤곽이 같은 등급의 앞뒤 윤곽을 저장한 색인, 서로 다른 등급의 아버지 윤곽과 아이 윤곽의 색인
method:CV_CHAIN_APPROX_NONE 아웃라인의 모든 픽셀 점 가져오기
코드: 실행 환경(VS2012 + OpenCV2.4)
#include "highgui.h"
#include "imgproc/imgproc.hpp"
int main()
{
cv::Mat image = cv::imread("D:/Development/OpenCV/images/binaryGroup.bmp" , 0) ;
std::vector<:vector>> contours ;
//
cv::findContours(image , contours ,
CV_RETR_EXTERNAL , CV_CHAIN_APPROX_NONE) ;
cv::Mat result(image.size() , CV_8U , cv::Scalar(255)) ;
cv::drawContours(result , contours ,
-1 , cv::Scalar(0) , 2) ;
cv::imshow("resultImage" , result) ;
//
std::vector<:vector>> allContours ;
cv::Mat allContoursResult(image.size() , CV_8U , cv::Scalar(255)) ;
cv::findContours(image , allContours ,
CV_RETR_LIST , CV_CHAIN_APPROX_NONE) ;
cv::drawContours(allContoursResult , allContours ,-1 ,
cv::Scalar(0) , 2) ;
cv::imshow("allContours" , allContoursResult) ;
//
std::vector<:vec4i> hierarchy ;
cv::findContours(image , contours , hierarchy , CV_RETR_TREE ,
CV_CHAIN_APPROX_NONE) ;
cv::waitKey(0) ;
return 0 ;
1, 포위 대상의 수직 행렬 가져오기
cv::Rect r0= cv::boundingRect(cv::Mat(contours[0]));
cv::rectangle(result,r0,cv::Scalar(0),2);
2. 포위 대상의 가장 작은 원을 얻는다
cv::Rect r0= cv::boundingRect(cv::Mat(contours[0]));
cv::rectangle(result,r0,cv::Scalar(0),2);
3. 포위 대상의 다각형 가져오기
// testing the approximate polygon
std::vector<:point> poly;
cv::approxPolyDP(cv::Mat(contours[2]),poly,
5, // accuracy of the approximation
true); // yes it is a closed shape
4, 포위 대상의 볼록 패키지 획득
// testing the convex hull
std::vector<:point> hull;
cv::convexHull(cv::Mat(contours[3]),hull);
5. 각 대상의 양심을 얻는다
itc= contours.begin();
while (itc!=contours.end()) {
// compute all moments
cv::Moments mom= cv::moments(cv::Mat(*itc++));
// draw mass center
cv::circle(result,
// position of mass center converted to integer
cv::Point(mom.m10/mom.m00,mom.m01/mom.m00),
2,cv::Scalar(0),2); // draw black dot
}
참고:findContours() 함수는 이미지를 변경합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.