преобразование кода свертки matlab в opencv в 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

Решение

попробуй сделать

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

вместо

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

Если вы используете непрочитанные параметры по умолчанию, OpenCv по умолчанию использует цветовой формат BGR вместо RGB!

0

Другие решения

Сделайте то же самое, что вы сделали в Matlab, сначала преобразуйте изображение в двойное.

image.convertTo(image, CV_32F);

Теперь я получил тот же результат в OpenCv и Matlab.

0

По вопросам рекламы [email protected]