2014-07-04 2 views
0

내 수평 그라데이션 results.The 하나는 OpenCV의 결과이며 다른 하나는 MATLAB 결과는 cpp에있는 OpenCV의 할 컨볼 루션 코드 MATLAB 변환 여기

나는 수평 및 수직 그라데이션을하려고하고있다 남아 어느 H = [1, -1] 및 V = [1; -1]

Mat H_gradient,G_Filter1,kernel,V_gradient; 

    Mat kernelH(1, 2, CV_32F); 
    kernelH.at<float>(0,0) = 1.0f; 
    kernelH.at<float>(0,1) = -1.0f; 


    Mat kernelV(2, 1, CV_32F); 
    kernelV.at<float>(0,0) = 1.0f; 
    kernelV.at<float>(1,0) = -1.0f; 

    cvtColor(image, image, CV_RGB2GRAY); 

    filter2D(image, H_gradient, -1 ,kernelH , Point(-1, -1), 0, BORDER_DEFAULT); 
    filter2D(image, V_gradient, -1 ,kernelV , Point(-1, -1), 0, BORDER_DEFAULT); 

그러나 여전히 내 matlab 코드 결과와 일치하지 않습니다. 왜 그런지 몰라? 그라디언트

에 대한

내 MATLAB 코드

image=double(image); 
% horizontal and vertical gradient 
H=[1 -1]; 
V=[1;-1]; 

H_Gradient=conv2(image,H,'same'); 
V_Gradient=conv2(image,V,'same'); 
+0

예제 이미지에 차이점을 표시 할 수 있습니까? – ypnos

+0

왼쪽에 이미지를 추가합니다. opencv 결과는 @ypnos입니다. –

답변

0

시도는, OpenCV의가 BGR 컬러 형식 대신을

cvtColor(image, image, **CV_BGR2GRAY**); 

대신

cvtColor(image, image, **CV_RGB2GRAY**); 

기본 imread 매개 변수를 사용하는 경우 사용합니까 기본 RGB!

+0

* CV_BGR2GRAY로 변경되었지만 여전히 opencv 및 matlab 결과가 동일하지 않습니다. –

0

Matlab에서했던 것과 동일한 작업을 먼저 이미지를 이중으로 변환하십시오.

image.convertTo(image, CV_32F); 

이제는 OpenCv와 Matlab에서 같은 결과를 얻었습니다.

+0

커널 H = [1 -1]에서 H = [- 1 1]로 변경되었으며 작동합니다. 지금은 왜 그러지 않습니까? @ André에게 조언 해 주셔서 감사합니다. –

관련 문제