OpenCV 식별 추출 이미지 의 수평선 과 수직선

4380 단어 OpenCV식별 추출
본 논문 의 사례 는 OpenCV 인식 추출 이미지 의 수평선 과 수직선 을 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
1)원리
이미지 형태학 작업 을 할 때 사용자 정의 구조 요 소 를 통 해 구조 요 소 를 실현 하여 이미지 의 일부 대상 에 민감 하고 다른 대상 에 민감 하지 않 으 면 민감 한 대상 을 변화 시 키 고 민감 하지 않 은 대상 으로 하여 금 수출 을 보류 하 게 할 수 있다.두 개의 가장 기본 적 인 형태학 조작 C 팽창 과 부식 을 통 해 서로 다른 구조 요 소 를 사용 하여 입력 이미지 에 대한 조작 을 실현 하고 원 하 는 결 과 를 얻 을 수 있다.
-팽창,출력 된 픽 셀 값 은 구조 요소 가 덮어 쓰 고 입력 한 그림 의 최대 픽 셀 값 입 니 다.

-부식,출력 된 픽 셀 값 은 구조 요소 가 덮어 쓰 고 입력 한 그림 의 최소 픽 셀 값 입 니 다.

흔히 볼 수 있 는 모양:직사각형,정원,직선,디스크 모양,벽돌 모양 등 각종 사용자 정의 모양.
2)절차
1.그림 컬러 그림 imread 입력
2.그 레이스 케 일 이미지 C cvtColor 로 변환
3.2 값 그림 C adaptiveThreshold 로 변환
4.구조 요소 정의
5.조작(부식+팽창)추출 수평 과 수직선
3).전체 코드
(본인 의 운영 환경 은 vs 2017+OpenCV 3.4)

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>

using namespace std;
using namespace cv;

//     
Mat gray_Img(Mat src)
{
 Mat dst = Mat::zeros(src.size(), src.type());
 cvtColor(src, dst, CV_BGR2GRAY);
 return dst;
}

//     (     )
Mat threshold_Img(Mat src)
{
 Mat dst = Mat::zeros(src.size(), src.type());
 //  :  ,   ,          ,                 ,         ADAPTIVE_THRESH_MEAN_C   ADAPTIVE_THRESH_GAUSSIAN_C ,           ,    THRESH_BINARY  THRESH_BINARY_INV,(blockSize)adaptiveThreshold            ,              ,       
 adaptiveThreshold(~src, dst, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2); 
 return dst;
}

//    (      )
Mat get_Vertical(Mat src)
{
 Mat dst = Mat::zeros(src.size(), src.type());
 return getStructuringElement(MORPH_RECT,Size(src.cols/16,1),Point(-1,-1));
}

//    (      )
Mat get_Horizontal(Mat src)
{
 Mat dst = Mat::zeros(src.size(), src.type());
 return getStructuringElement(MORPH_RECT, Size(1, src.rows / 16), Point(-1, -1));
}

//  
Mat erode_Img(Mat src,Mat kernel)
{
 Mat dst = Mat::zeros(src.size(), src.type());
 erode(src, dst, kernel);
 return dst;
}

//  
Mat dilate_Img(Mat src, Mat kernel)
{
 Mat dst = Mat::zeros(src.size(), src.type());
 dilate(src, dst, kernel);
 return dst;
}


int main()
{
 Mat src = imread("001.png");
 if (src.empty())
 {
 cout << "fail to load image" << endl;
 return -1;
 }

 namedWindow("input_Img", 0);
 imshow("input_Img", src);
 //       
 Mat grayImg = gray_Img(src);
 namedWindow("input_Img_gray", 0);
 imshow("input_Img_gray", grayImg);
 //     
 Mat thresholdImg = threshold_Img(grayImg);
 namedWindow("input_Img_threshold", 0);
 imshow("input_Img_threshold", thresholdImg);

 Mat verticalLine = get_Vertical(src);
 Mat horizontalLine = get_Horizontal(src);
 //      
 Mat vertical_Line_erode = erode_Img(thresholdImg, verticalLine);
 Mat vertical_Line_dilate = dilate_Img(vertical_Line_erode, verticalLine);
 //         
 namedWindow("verticalLine", 0);
 imshow("verticalLine", vertical_Line_dilate);

 Mat horizontal_Line_erode = erode_Img(thresholdImg, horizontalLine);
 Mat horizontal_Line_dilate = dilate_Img(horizontal_Line_erode, horizontalLine);
 //         
 namedWindow("horizontalLine", 0);
 imshow("horizontalLine", horizontal_Line_dilate);

 waitKey();
 return 0;
}
4).나의 운행 결과
1.그 레이스 케 일 결과

2.이치 화

3.추출 한 수직선

4.추출 한 수평선

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

좋은 웹페이지 즐겨찾기