텍스트가 원래 문서의 경우, 허가없이 복제 할 수 없다
원래 블로거의 블로그 주소 : https://blog.csdn.net/qq21497936
원래 블로거 탐색 블로그 : https://blog.csdn.net/qq21497936/article/details / 102 478 062
이 문서의 블로그 주소 : https://blog.csdn.net/qq21497936/article/details/104490409
디렉토리
OpenCV의 개발 상자
" OpenCV의 개발 노트 (사각형) : 사용 mingw530_32 컴파일 openCV3.4.1의 소스 코드, 빌드 Qt5.9.3 에서 OpenCV의 개발 환경 ."
" 에서 OpenCV 개발 노트의 (a)에서 OpenCV 프리젠 테이션은, 컴파일 "
" OpenCV의 개발 노트 (B) : cvui의 인터페이스 "
" OpenCV의 개발 노트 (C)에서 OpenCV 이미지 개념 및 기본 작동 ."
" OpenCV의 개발 노트 (d)는 : OpenCV의는 가져 오기 및 저장 사진과 비디오 데이터 ."
" OpenCV의 개발 노트 (V) : OpenCV의 읽기 작업 카메라 "
" OpenCV의 개발 정보 (VI) :이 OpenCV의 데이터 구조, 색상, 색 공간 변환 함수를 기초 "
" 에서 OpenCV 개발 노트 (칠) : OpenCV의 기본 그래픽 그리기 "
" OpenCV의 개발 정보 (VIII)에서 OpenCV 미러링 공통 동작 타이밍, 스케일링, 회전, "
" OpenCV의 개발 정보 (IX) 다음에서 OpenCV 영역 화상합니다 (ROI )과 전, 부분 화상을 혼합 "
" OpenCV의 개발 노트 ( 열)에서 OpenCV 이미지의 색상 채널 분리 이미지 색상 및 멀티 채널 믹싱 "
" OpenCV의 개발 노트 (XI)는 :에서 OpenCV 컴파일 지원 GPU는 (CUDA) 윈 - Qt는-mingw32의 개발 가속화 컴파일러 ."
" OpenCV의 개발 정보 (XIII)에서 OpenCV 이미지 콘트라스트, 밝기 조정 "
" OpenCV의 개발 정보 (XIV)의 선형 필터링을위한 기본 알고리즘 - 차단 필터 "
" OpenCV의 개발 정보 (XV) : 선형 필터링 알고리즘의 기초 - 평균 필터 "
" OpenCV의 개발 노트 (XVI) : 선형 필터링을위한 기본 알고리즘 - 가우스 필터 "
" OpenCV의 개발 노트 (17)는 선형 필터링 알고리즘과 비교의 기초 - 블록 평균 가우시안 "
" OpenCV의 개발 노트 (XVIII) : 비선형 필터링 알고리즘의 기초 - 중간 필터링 "
" OpenCV의 개발 정보 (XIX) 비선형 필터링 알고리즘의 기초 - 양자 필터링 "
"OpenCV의 개발 정보 (XX) 알고리즘의 비교를 위해 비선형 필터링 기준 - 여과의 양자의 값은"해제 될
"OpenCV의 개발 노트 (XXI) : 형태 학적 필터링 알고리즘의 기초 - 인플레이션은"발매 예정
"OpenCV의 개발 정보 (XXII) 형태학 필터링 알고리즘의 기초 - 부식"해제 될
"OpenCV의 개발 정보 (XXIII) 형태학 필터링 알고리즘의 기초 - (부식 1 팽창 후) 개방 동작"게시 할
"OpenCV의 개발 노트 (24) 형태 적 필터링 알고리즘에 기초하여 - (부식 1 팽창 후) 개폐 동작"게시 할
"OpenCV의 개발 노트 (XXV) : 형태 학적 필터링 알고리즘의 기초 - 흰색 모자"발매 예정
"OpenCV의 개발 노트 (26) : 형태 학적 필터링 알고리즘의 기초 - 블랙 햇 (Black Hat)은"발매 예정
보충에 계속 ...
OpenCV의 개발 노트 (XVI) : 선형 필터링을위한 기본 알고리즘 - 가우시안 필터
머리말
이 장에서는 가우시안 필터와 선형 필터링을 설명한다.
데모
가우시안 필터
개요
가우시안 필터링은 가우시안 커널 산 컨벌루션 각 픽셀 어레이에 입력 한 화소 값과 컨벌루션 출력된다. 화상을 평활화 한 후 가우스 필터 처리는 표준 편차에 의존한다.
가우시안 필터 출력은 더 부드럽고 매끄러운 에지 보존도 좋았다이며, 평균 필터에 대해, 따라서 동안 가까운 중앙 높은 가중치에서 화소 당해 상품의 가중 평균이고,.
화상 처리에서는, 가우시안 필터는 일반적으로 두 가지 방법으로 구현된다 :
- 창 이산 컨벌루션 슬라이딩 창 : 이산 윈도우를 슬라이딩 윈도우 계산이 매우 많은 양이 매우 큰 경우 (즉, 구현 분리 필터를 사용하여) 구현은 퓨리에 기반으로 간주 될 수있다 변환 .
- 푸리에 변환;
특징
가우시안 필터링은 다음과 같이 가장 유용한 필터 필터 특성이있다 :
- 덜 왜곡 : 단일 값 함수는 가우시안 함수 대신 화소의 저장소 가우스 필드의 픽셀 가중 평균값은 상기 화소의 왜곡을 감소, 체중 단조롭게 거리에 따라 변화한다.
- 회전 대칭 : 회전에 대한 저항을 갖는 가우스 함수, 가우스 성도 평활화 각 방향은, 방향성에 대한 소음 본 견적 매끄러운 성능이 임의의 방향으로 편향되지 않도록하기 어렵고, 동일하다.
- 되지 주파수에 영향을 푸리에 가우스 함수 변환하는 스펙트럼의 하나의 로브이며, 가우시안 필터는 원하는 신호의 대부분을 유지하면서 평활화 화상의 불필요한 고주파 신호에 의해 영향을받지 않을 것이다.
- 제어 잡음 파라미터 : 분산의 정도에 의해 가우시안 평활화 필터 (σ)]는 결정 (σ)]은 ,보다 광대역, 평활화의 개선 정도는, 화상 노이즈는 제어 매개 변수가 제공 될 수있다.
- 박리 : 이차원 가우스 컨벌루션은 두 단계, 첫번째 이미지 및 하나의 차원 가우스 함수의 컨볼 루션, 콘볼 루션 결과와 같은 하나의 차원 가우스 함수의 컨볼 루션에 수직 한 방향으로 수행 될 수있다.
함수 프로토 타입
void GaussianBlur( InputArray src,
OutputArray dst,
Size ksize,
double sigmaX,
double sigmaY = 0,
int borderType = BORDER_DEFAULT );
- 매개 변수는 : 일반적으로 이력서 :: 매트를 입력 InputArray 및 이미지 채널의 수를 처리 할 수 있습니다. 참고하지만, 사진의 깊이로 처리해야 CV_8U , CV_16U , CV_16S , CV_32F , CV_64F의 하나.
- 매개 변수 두 , OutputArray 유형, 출력 대상 이미지는 원래 사진을 필요로하고 동일한 크기와 유형이있다.
- 세 개의 매개 변수 : 크기를 입력 ksize, 하위 계정의 크기입니다. (H, w) 통용 사이즈가 3 × 3 크기의 서브 회계 크기 (3,3)의 크기를 나타내는 것은로 표시되는 서브 차지하는 W와 H는 서로 다른 크기 일 수있다.
- 네 개의 매개 변수 : double 형 sigmaX는 X 방향의 가우스 커널 함수의 표준 편차를 나타냅니다.
- 5 개 개의 매개 변수 : double 형 sigmaY는, Y 방향의 가우스 커널 함수의 표준 편차를 나타냅니다.
위, sigmaX 및 sigmaY가 0 인 경우, 하위 계정을 사용하여 계산의 기본 :
- 여섯 개 매개 변수 : INT 형 borderType, 외부 경계 픽셀의 특정 이미지 모드를 추론은, 기본은 일반적으로 사용하지 않고, BORDER_DEFULAT 값.
소스 데모
void OpenCVManager::testGaussianBlurFilter()
{
QString fileName1 = "E:/qtProject/openCVDemo/openCVDemo/modules/openCVManager/images/1.jpg";
cv::Mat srcMat = cv::imread(fileName1.toStdString());
cv::String windowName = _windowTitle.toStdString();
cvui::init(windowName);
if(!srcMat.data)
{
qDebug() << __FILE__ << __LINE__
<< "Failed to load image:" << fileName1;
return;
}
cv::Mat dstMat;
dstMat = cv::Mat::zeros(srcMat.size(), srcMat.type());
cv::Mat windowMat = cv::Mat(cv::Size(dstMat.cols * 3, dstMat.rows),
srcMat.type());
int ksize = 1; // 核心大小
int sigmaX = 0; // x方向的标准偏差
int sigmaY = 0; // y方向的标准偏差
cvui::window(windowMat, dstMat.cols, 0, dstMat.cols, dstMat.rows, "settings");
while(true)
{
windowMat = cv::Scalar(0, 0, 0);
// 原图先copy到左边
cv::Mat leftMat = windowMat(cv::Range(0, srcMat.rows),
cv::Range(0, srcMat.cols));
cv::addWeighted(leftMat, 1.0f, srcMat, 1.0f, 0.0f, leftMat);
// 中间为调整滤波参数的相关设置
cvui::printf(windowMat, 375, 20, "ksize = size * 2 + 1");
cvui::trackbar(windowMat, 375, 30, 165, &ksize, 0, 10);
cvui::printf(windowMat, 375, 80, "sigmaX");
cvui::trackbar(windowMat, 375, 90, 165, &sigmaX, 0, 100);
cvui::printf(windowMat, 375, 140, "sigmaY");
cvui::trackbar(windowMat, 375, 150, 165, &sigmaY, 0, 100);
// 高斯滤波
cv::GaussianBlur(srcMat, dstMat, cv::Size(ksize * 2 + 1, ksize * 2 + 1), sigmaX / 10.f, sigmaY / 10.f);
// 效果图copy到右边
// 注意:rang从位置1到位置2,不是位置1+宽度
cv::Mat rightMat = windowMat(cv::Range(0, srcMat.rows),
cv::Range(srcMat.cols * 2, srcMat.cols * 3));
cv::addWeighted(rightMat, 0.0f, dstMat, 1.0f, 0.0f, rightMat);
// 更新
cvui::update();
// 显示
cv::imshow(windowName, windowMat);
// esc键退出
if(cv::waitKey(25) == 27)
{
break;
}
}
}
버전 번호 v1.11.0에 해당 프로젝트 템플릿
해당하는 버전 번호 v1.11.0
원래 블로거의 블로그 주소 : https://blog.csdn.net/qq21497936
원래 블로거 탐색 블로그 : https://blog.csdn.net/qq21497936/article/details/102478062를
이 문서의 블로그 주소 : HTTPS : // 블로그 .csdn.net / qq21497936 / 기사 / 세부 / 104490409