OpenCV 2.4.3 C++부 드 러 운 처리 분석
부 드 러 운 것 도 모호 하 다 고 하 는데 간단 하고 사용 빈도 가 높 은 이미지 처리 방법 이다.
부 드 럽 게 처리 할 때 필터 가 필요 합 니 다.가장 많이 사용 되 는 필 터 는 선형 필터 이 고 선형 필터 처리 의 출력 픽 셀 값(예 를 들 어은 입력 픽 셀 값(예 를 들 어의 가중 평균 이다.
핵 이 라 고 하 는데 그것 은 단지 가중 계수 일 뿐이다.
평균 값 부 드 러 움
다음은 blur 함 수 를 사용 하 는 평균 값 입 니 다.
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <stdio.h>
using namespace cv;
int main( int argc, char** argv ){
Mat image;
image = imread( argv[1]);
if( argc != 2 || !image.data ){
printf("
");
return -1;
}
namedWindow( " - " );
namedWindow( " - " );
imshow( " - ", image );
Mat out;
blur( image, out, Size(3, 3));
imshow( " - ", out );
waitKey( 0 );
}
blur 함수 API 자료:귀 일화 블록 필 터 를 사용 하여 모호 한 그림 조작 을 하 다.C++: void blur(InputArray src, OutputArray dst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT)인자 src C 는 그림 을 입력 하면 임의의 채널 수 를 사용 할 수 있 습 니 다.이 함 수 는 채널 에 대해 독립 적 으로 처리 하지만 깊이 는 CV 일 수 밖 에 없습니다.8U, CV_16U, CV_16S, CV_32F or CV_64F。dst C 출력 그림,입력 그림 과 같은 크기 와 깊이.ksize C 퍼 지 커 널 크기.anchor C 닻 점,기본 값 은(-1,-1),즉 닻 점 은 커 널 의 중심 에 있 습 니 다.borderType C 는 이미지 경 계 를 판단 하 는 데 사 용 됩 니 다.
이 함 수 는 그림 을 부 드 럽 게 처리 하여 아래 의 커 널 을 이용 하 였 습 니 다:
blur(src,dst,ksize,anchor,borderType)를 호출 하 는 것 은 box Filter(src,dst,src.type(),anchor,true,borderType)를 호출 하 는 것 과 같 습 니 다.
blur 는 귀 일 화 된 블록 필 터 를 사용 합 니 다.출력 픽 셀 값 은 핵 창 내 픽 셀 값 의 평균 값(모든 픽 셀 가중 계수 가 같 음)입 니 다.
가우스 평활
다음 코드 는 GaussianBlur 를 사용 하여 부 드 러 움 을 실현 합 니 다:
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <stdio.h>
using namespace std;
using namespace cv;int main( int argc, char** argv ){
Mat image;
image = imread( argv[1]);
if( argc != 2 || !image.data ){
printf("
");
return -1;
}
namedWindow( " - " );
namedWindow( " - " );
imshow( " - ", image );
Mat out;
GaussianBlur( image, out, Size( 3, 3 ), 0, 0 );
imshow( " - ", out );
waitKey( 0 );
}
GaussianBlur 함수 API 자료:가우스 필터 로 퍼 지 조작 C+: void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT)파라미터 src C 그림 을 입력 하면 임의의 채널 수 를 사용 할 수 있 습 니 다.이 함 수 는 채널 에 대해 독립 적 으로 처리 하지만 깊이 는 CV 일 수 밖 에 없습니다.8U, CV_16U, CV_16S, CV_32F or CV_64F.dst C 그림 을 출력 합 니 다.입력 그림 과 같은 크기 와 깊이 입 니 다.ksize C.가우스 커 널 크기.ksize.width 와 ksize.height 는 다 를 수 있 지만 정수 여야 합 니 다.또는 0 과 같 습 니 다.매개 변수 sigma 의 탑승 에 의 해 결 정 됩 니 다.sigmaX C.가우스 커 널 은 X 방향 에서 의 표준 편차 이다.sigmaY C.가우스 커 널 은 Y 방향 에서 의 표준 편차 이다.sigmay 가 0 이 라면 sigmax 의 값 과 같 을 것 입 니 다.만약 그들 이 모두 0 이 라면 그들 은 ksize.width 와 ksize.height 로 계산 할 수 있 습 니 다.borderType C 그림 경 계 를 판단 하 는 모드 입 니 다.
가장 유용 한 필터.가우스 필 터 는 입력 배열 의 모든 픽 셀 점 과 가우스 커 널 볼 륨 을 출력 픽 셀 값 으로 합 니 다.
1 차원 고 스 함 수 를 참고 하면 우 리 는 그 가 중간 에 크 고 양쪽 이 작은 함수 라 는 것 을 볼 수 있다.
그래서 고 스 필터 의 가중 수 는 중간 이 크 고 사방 이 작다.
그 2 차원 고 스 함 수 는:
그 속 평균치(피크 대응 위치), 표준 차 를 나타 낸다(변수 변수 각각 하나의 평균치 도 있 고,또 하나의 표준 차이 도 있다.
중간 값 부 드 러 움
medianBlur 를 사용 하여 중간 값 을 부 드 럽 게 실행 합 니 다:
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <stdio.h>
using namespace std;
using namespace cv;int main( int argc, char** argv ){
Mat image;
image = imread( argv[1]);
if( argc != 2 || !image.data ){
printf("
");
return -1;
}
namedWindow( " - " );
namedWindow( " - " );
imshow( " - ", image );
Mat out;
medianBlur( image, out, 3);
imshow( " - ", out );
waitKey( 0 );
}
medianBlur 함수 API 자료:중간 값 필터 로 모호 조작 C++: void medianBlur(InputArray src, OutputArray dst, int ksize) Parameters:src C 는 1,3,4 채널 그림 입력 을 지원 합 니 다.ksize 가 3 또는 5 일 때 그림 의 깊이 는 CV 일 수 밖 에 없습니다.8U,,CV_16U 혹은 CV_32F,다른 대공 경 사이즈 에 대해 서 는 깊이 만 CV 로 지원 합 니 다.8U。dst C 그림 을 출력 합 니 다.입력 그림 과 같은 크기 와 깊이 입 니 다.ksize C 선형 지름 크기 는 1 보다 큰 홀수 일 수 밖 에 없다.예 를 들 어 3,5,7...
중간 값 필 터 는 그림 의 모든 픽 셀 을 인접 도 메 인(현재 픽 셀 중심의 정사각형 영역)픽 셀 의 중간 값 으로 대체 합 니 다.
쌍무 가 매끄럽다.
bilateralFilter 를 사용 하여 쌍무 부 드 러 움 을 실행 합 니 다:
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <stdio.h>
using namespace std;
using namespace cv;int main( int argc, char** argv ){
Mat image;
image = imread( argv[1]);
if( argc != 2 || !image.data ){
printf("
");
return -1;
}
namedWindow( " - " );
namedWindow( " - " );
imshow( " - ", image );
Mat out;
bilateralFilter ( image, out, 3, 3*2, 3/2 );
imshow( " - ", out );
waitKey( 0 );
}
bilateralFilter 의 API 자료:그림 에 쌍무 필 터 를 적용 합 니 다.C++: void bilateralFilter(InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace, intborderType=BORDER_DEFAULT ) Parameters:src C 소스 는 8 비트 또는 부동 소수점,1 또는 3 채널 그림 이 어야 합 니 다.dst C 그림 을 출력 합 니 다.입력 그림 과 같은 크기 와 깊이 입 니 다.d C.필터 과정 에서 사용 하 는 픽 셀 인접 도 메 인 지름 은 이것 이 비 정수 라면 이 값 은 sigmaSpace 에 의 해 결정 된다.sigmaColor C 색상 공간의 표준 분산.수치 가 클 수록 먼 색 이 이웃 지역 에 섞 여 더 큰 색 구간 에서 같은 색 을 얻 게 된다 는 뜻 이다.sigmaSpace C 좌표 공간의 레이 블 분산.수치 가 클 수록 멀리 있 는 픽 셀 이 서로 영향 을 줄 것 이 라 고 생각 하여 더 큰 지역 에서 비슷 한 색 을 가 져 올 수 있 습 니 다.d>0,d 는 인접 지역 의 크기 를 지정 하고 sigmaSpace 와 무관 합 니 다.그렇지 않 으 면,d 는 sigma Space 와 정비례 한다.
원 리 는 참고 할 수 있다.
http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html
현재 우리 가 알 고 있 는 필 터 는 모두 그림 을 부 드 럽 게 하기 위해 서 이다.문 제 는 어떤 때 는 이 필터 들 이 소음 을 약화 시 킬 뿐만 아니 라 가장자리 도 지 워 버 렸 다 는 것 이다.이러한 상황 을 피하 기 위해 서 우 리 는 쌍무 필 터 를 사용 할 수 있다.
고 스 필터 와 유사 하 며,쌍무 필터 도 모든 이웃 픽 셀 에 가중 계 수 를 분배 한다.이러한 가중 계 수 는 두 부분 을 포함 하고 첫 번 째 부분 가중 방식 은 고 스 필터 와 마찬가지 로 두 번 째 부분의 가중치 는 이 이웃 픽 셀 과 현재 픽 셀 의 그 레이스 케 일 차이 에 달 려 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ip camera android에 액세스하고 java를 사용하여 모니터에 표시그런 다음 PC에서 다운로드 폴더를 추출해야 합니다 그런 다음 프로젝트 폴더에 다운로드한 javacv 라이브러리를 추가해야 합니다. 먼저 라이브러리 폴더를 마우스 오른쪽 버튼으로 클릭한 다음 jar/폴더 추가를 선택...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.