OpenCV의 개발 노트 (XV) : 선형 필터링 알고리즘의 기초 - 평균 필터

텍스트가 원래 문서의 경우, 허가없이 복제 할 수 없다
원래 블로거의 블로그 주소 : https://blog.csdn.net/qq21497936
원래 블로거 탐색 블로그 : https://blog.csdn.net/qq21497936/article/details / 102 478 062
이 문서의 블로그 주소 : https://blog.csdn.net/qq21497936/article/details/104475771

디렉토리

머리말

데모

평균 필터

개요

함수 프로토 타입

소스 데모

버전 번호 v1.10.0에 해당 프로젝트 템플릿


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의 개발 노트 (XII) : OpenCV의 컴파일 지원 GPU (CUDA)를 개발 가속화 윈 - QT를-msvc2015 컴파일러 (opencv3.4.0 , cuda9.0 , VS2015) "

" 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의 개발 노트 (XV) : 선형 필터링 알고리즘의 기초 - 평균 필터

 

머리말

필터링으로 평균 선형 필터링 학습이 장.

 

데모

 

평균 필터

개요

      커버 평균 필터 부 영역을 차지 템플릿 내의 모든 픽셀 값의 가중 평균으로하는 픽셀 포인트 필드 대신 반환 지점의 평균 그레이 값. 일반적인 3 × 3 서브 회계 템플릿 영역 (9) 내의 구성 요소이며,도 2의 전류를 중심 화소로 평균 필터링 수단은 다음의 수학 식으로 대체.

      잘 식으로부터 알 수있다 : 3 × 3 서브 매트릭스를 차지하고, 상기 중간 점의 크기가 9 점의 평균값으로 대체된다.

      평균 필터 알고리즘 빠른 속도.

      평균 필터 알고리즘의 존재는 물론, 화상 내용을 보호 할 수 없다는 결점을 해결 한 다음, 이미지는 이미지가 흐리게 적절히 노이즈 점을 제거 할 수있다 화상의 내용을 손상 잡음 제거.

함수 프로토 타입

      다음과 같이 평균 필터 함수 프로토 타입은 다음과 같습니다

void blur( InputArray src, 
           OutputArray dst,
           Size ksize, 
           Point anchor = Point(-1,-1),
           int borderType = BORDER_DEFAULT );
  • 매개 변수는 : 일반적으로 이력서 :: 매트를 입력 InputArray 및 이미지 채널의 수를 처리 할 수 ​​있습니다. 참고하지만, 사진의 깊이는 CV_8U, CV_16U, CV_16S, CV_32F, CV_64F의 하나로서 취급 할 필요가 있습니다.
  • 매개 변수 두, OutputArray 유형, 출력 대상 이미지는 원래 사진을 필요로하고 동일한 크기와 유형이있다.
  • 세 개의 매개 변수 : 크기를 입력 ksize, 하위 계정의 크기입니다. (시간, w) 일반 사용 크기는 하위 계정으로 표시되는 3 × 3 크기의 서브 회계, 크기 (3,3)의 크기를 나타냅니다.
  • 네 개의 파라미터 : 소수점 형, 앵커 (평활 된 점의 값)를 도시. 참고 : 기본값 점 (-1, -1). 포인트가 마이너스 인 경우에는 앵커의 중심 코어를 복용하는 것을 의미한다.
  • 5 개 개의 매개 변수 : INT 형 borderType, 외부 경계 픽셀의 특정 이미지 모드를 추론은, 기본은 일반적으로 사용하지 않고, BORDER_DEFULAT 값.

 

소스 데모

void OpenCVManager::testBlurFilter()
{
    QString fileName1 = "E:/qtProject/openCVDemo/openCVDemo/modules/openCVManager/images/1.jpg";
    cv::Mat matSrc = cv::imread(fileName1.toStdString());

    cv::String windowName = _windowTitle.toStdString();
    cvui::init(windowName);

    if(!matSrc.data)
    {
        qDebug() << __FILE__ << __LINE__
                 << "Failed to load image:" << fileName1;
        return;
    }

    cv::Mat dstMat;
    dstMat = cv::Mat::zeros(matSrc.size(), matSrc.type());
    cv::Mat windowMat = cv::Mat(cv::Size(dstMat.cols * 3, dstMat.rows),
                                matSrc.type());
    int ksize = 3;      // 核心大小
    int anchor = -1;    // 锚点, 正数的时候必须小于核心大小,即:-1 <= anchor < ksize
    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, matSrc.rows),
                                    cv::Range(0, matSrc.cols));
        cv::addWeighted(leftMat, 1.0f, matSrc, 1.0f, 0.0f, leftMat);
        // 中间为调整滤波参数的相关设置
        cvui::printf(windowMat, 375, 40, "ksize");
        cvui::trackbar(windowMat, 375, 50, 165, &ksize, 1, 10);
        if(anchor >= ksize)
        {
            anchor = ksize - 1;
        }
        cvui::printf(windowMat, 375, 100, "anchor");
        cvui::trackbar(windowMat, 375, 110, 165, &anchor, -1, ksize-1);

        // 均值滤波:方框滤波比均值滤波多了颜色深度的参数
        cv::blur(matSrc,
                 dstMat,
                 cv::Size(ksize, ksize),
                 cv::Point(anchor, anchor));

        // 效果图copy到右边
        // 注意:rang从位置1到位置2,不是位置1+宽度
        cv::Mat rightMat = windowMat(cv::Range(0, matSrc.rows),
                                     cv::Range(matSrc.cols * 2, matSrc.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.10.0에 해당 프로젝트 템플릿

      해당하는 버전 번호 v1.10.0


원래 블로거의 블로그 주소 : https://blog.csdn.net/qq21497936
원래 블로거 탐색 블로그 : https://blog.csdn.net/qq21497936/article/details/102478062를
이 문서의 블로그 주소 : HTTPS : // 블로그 .csdn.net / qq21497936 / 기사 / 세부 / 104475771

게시 된 239 개 원래 기사 · 원 찬양 259 · 전망 430 000 +

추천

출처blog.csdn.net/qq21497936/article/details/104475771