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.추출 한 수평선
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.