opencv 외부 윤곽 추출 및 외부 사각형 상자 추가

그 동안 opencv 로 이미지 처 리 를 해 왔 는데 호출 가능 한 함수 가 많 지만 해당 코드 를 직접 찾 는 것 이 어렵 다 는 것 을 알 게 되 었 습 니 다.연결 도 메 인 을 찾 고 연결 도 메 인 바깥쪽 에 상 자 를 추가 하 는 것 을 알 게 되 었 습 니 다.Mat 사각형 을 사용 하 는 습관 이 있 는 저 에 게 는 코드 가 적 고 나중에 자신 이 사용 하지 않도록 기록 하 겠 습 니 다.
아래 그림 에 문자 의 가장자리 검 사 를 해 야 합 니 다.

프로그램의 구체 적 인 절 차 는 다음 과 같다.
(1)그 레이스 케 일,이치 화
(2)이미지 팽창
(3)팽창 이미지 의 가장 자 리 를 감지 하고 외 사각형 상자 라 고 합 니 다.
구현 코드 는 다음 과 같 습 니 다:

#include "stdafx.h"
#include "stdio.h"
#include "Base_process.h"
#include "opencv/cv.h"
#include "opencv/highgui.h"
#include <opencv2/opencv.hpp>
#include <tchar.h>
#include <iostream>
#include <fstream>
 
using namespace std;
using namespace cv;
 
void main()
{
 Mat src = imread("D:\\Recognize_Form_Project\\test_images\\0.jpg");//    /*image180.jpg*/
 
 Mat gray_image;
 cvtColor(src, gray_image, CV_BGR2GRAY);
 imwrite("src.jpg", src);
 
 Mat binary_image;
 adaptiveThreshold(gray_image, binary_image, 255, CV_ADAPTIVE_THRESH_MEAN_C,
 CV_THRESH_BINARY_INV, 25, 10); ///          
 
 imwrite("erzhi.jpg", binary_image);
 
 //  
 Mat de_noise = binary_image.clone();
  //    
 
 medianBlur(binary_image, de_noise, 5);
 
 /////////////////////////    ////////////////////
 Mat dilate_img;
 Mat element = getStructuringElement(MORPH_RECT, Size(20, 20/*15, 15*/));
 dilate(de_noise, dilate_img,element);
 imwrite("dilate.jpg", dilate_img);
 
 
 //    
 //     ,              ,FindContours          
 vector<vector<Point>> contours;
 vector<Vec4i> hierarchy;
 findContours(dilate_img, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);//CV_RETR_EXTERNAL       ,           
 
 Mat contoursImage(dilate_img.rows, dilate_img.cols, CV_8U, Scalar(255));
 int index = 0;
 for (; index >= 0; index = hierarchy[index][0]) {
 cv::Scalar color(rand() & 255, rand() & 255, rand() & 255);
 // for opencv 2
 // cv::drawContours(dstImage, contours, index, color, CV_FILLED, 8, hierarchy);//CV_FILLED             ,     ( thickness==cv_filled),       
 // for opencv 3
 //cv::drawContours(contoursImage, contours, index, color, cv::FILLED, 8, hierarchy);
 
 cv::drawContours(contoursImage, contours, index, Scalar(0), 1, 8, hierarchy);//        
 
 Rect rect = boundingRect(contours[index]);//     
 rectangle(contoursImage, rect, Scalar(0,0,255), 3);//        
 }
 
 
 imwrite("zt.jpg", contoursImage);
 
 cout << "    ";
 
 de_noise.release();
 element.release();
 dilate_img.release();
 binary_image.release();
 gray_image.release();
}
상응하는 결과 도:
팽창 도:

연결 도 메 인 검사 도:

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

좋은 웹페이지 즐겨찾기