2013-05-20 4 views
0

이 함수는이 줄을 사용하고 있지만 오류가 있습니다.filter2D openCV 함수 오류

filter2D(GaussKernel,conspic1,GaussKernel.depth(),split(GaussKernel,KernelAchrSplit),Point(-1,-1),0,BORDER_DEFAULT); 

커널 및 conspic1은 Mat 개체입니다. 나는 커널에 문제가 있다고 생각한다. 왜냐하면 나는 그 함수를 리턴하는 함수를 알지 못하기 때문이다. 그래서 분할 기능을 사용

이 C++의 함수를 사용하는 방법입니다 :

void filter2D(InputArray src, OutputArray dst, int ddepth, InputArray kernel, Point anchor=Point(-1,-1), double delta=0, int borderType=BORDER_DEFAULT); 

내가 가진 오류는 다음과 같습니다

무효 표현의

잘못된 사용은

+0

당신이 사용하는 언어는 무엇? 태그는 C#이라고 말하지만 원래의 질문은 C++을 언급했습니다. – Aurelius

답변

0

내가 matlab에에서 번역되어 무엇을 가지고 내가 무슨 짓을

GaussKernel=fspecial('gaussian',maxhw,sigma); 
conspic=filter2(GaussKernel,conspic,'same'); //Gaussian snoothing in each orientation 

은 다음과 같습니다

GaussianBlur(maxhw,GaussKernel,Size(0,0),1,1,BORDER_DEFAULT; 
//setting 1,1 ; i m setting the Gaussian kernel standard deviation as 
//the paramether sigma in Matlab first line 

filter2D(GaussKernel,conspic1,GaussKernel.depth(),split(GaussKernel,KernelAchrSplit),Point(-1,-1),0,BORDER_DEFAULT); 
//I know I don t have to use split for the kernel paramether, but I suppose I have 
// to use GaussKernel Mat object's kernel and I don t know how get it 
+0

내가 링크 된 문서를 읽으십시오. 'cv :: GaussianBlur'는 가우시안 커널을 생성하지 않고, 정의한 매개 변수로 흐리게 처리합니다. 함수를 올바르게 호출하는 것처럼 보입니다. 'cv :: filter2D' 에의 2 번째의 호출은 불필요합니다. 또한이 질문은 답이 아닌 편집 내용이어야합니다. – Aurelius

+0

_ 연화 가우시안 필터 _ _ % 이미지 크기의 함수로 가우시안 매개 변수 _. . . . . . . . . . . . . ..., .... maxhw = max (0, floor (min (r/2, c/2) -1)); . . . . . . . . . . . . . . ... . . ... . . ... . . . . . . . ... . . . ... . . . . . . . . σ = max (r, c) * 0.025; . . . . . . ... . . . . . ... . . . . . ... . . ... . ... . ... . . ... . ... . . ... . ... . . . . . GaussKernel = fspecial ('gaussian', maxhw, sigma); . . % 각 방향에서 % 가우시안 평활화 _ conspic = filter2 (GaussKernel, conspic, 'same'); conspic1 = conspic1 + conspic; – Elvio

+0

이것은 내가해야 할 일이다. 도와 줘서 고맙다! 코멘트에 어떻게 내려갈 지 말해 줄 수 있어요! 나는이 행을 위해 내가 C에서 한 일을 게시 할 수있다. 이제 나는 C에서 시그마 활용에 대해 확신하지 못한다. – Elvio

0

당신은 당신의 오류 때문에 나타납니다 cv::split()void을, cv::filter2D()cv::Mat 매개 변수를 네 번째 인수로 사용합니다.

부동 소수점 cv::Mat을 만들고 원하는 값으로 채우는 것만으로 임의의 커널을 만들 수 있습니다. 한 예로 :

cv::Mat kern = cv::Mat::ones(15,15, CV_32FC1)/225; 

OpenCV의 또한 cv::getGaussianKernel() 같은 일반적인 커널을 계산하는 몇 가지 기능을 제공합니다.

그러나 가우시안 필터링을 수행하려는 것처럼 보이기 때문에 cv::GaussianBlur()을 사용하는 것이 더 간단 할 것입니다.

+0

나는 대답했다. .. 내려감! – Elvio