Как извлечь числовую градиентную матрицу из матрицы изображений в Opencv - PullRequest
2 голосов
/ 01 апреля 2012

Я ищу способ получить числовой градиент из матрицы. Такой же Функция реализована в документации Matlab по умолчанию. http://www.mathworks.com/help/techdoc/ref/gradient.html, но я не смог найти ничего в opencv.

Я хочу перенести это на C ++, используя opencv.

Должен ли я использовать sobel для горизонтального и вертикального градиента или любого другого другая функция или способ сделать это ???

Mat grad_x, grad_y;
Mat abs_grad_x, abs_grad_y;

/// Gradient X
Sobel( mat, grad_x, CV_32F, 1, 0, 3);
imshow("xx",grad_x);
convertScaleAbs( grad_x, abs_grad_x );
/// Gradient Y
Sobel( mat, grad_y, CV_32F, 0, 1, 3);
convertScaleAbs( grad_y, abs_grad_y );

/// Total Gradient (approximate)
Mat res;
addWeighted( abs_grad_x, 0.5, abs_grad_y, 0.5, 0, res );

[EDIT] Решение

Mat grad_x,abs_grad_x,grad_y,abs_grad_y;
int type=CV_64F ; 
Gradient.setTo(Scalar::all(0));
/// Gradient Y
Sobel( input, grad_x, type, 1, 0, 3);
convertScaleAbs(grad_x,abs_grad_x);
cv::accumulateSquare(abs_grad_x,Gradient);
/// Gradient Y
Sobel(input, grad_y, type, 0, 1, 3);
convertScaleAbs(grad_y,abs_grad_y);
cv::accumulateSquare(abs_grad_y,Gradient);

    imshow("gradient Mag",Gradient);

1 Ответ

1 голос
/ 01 апреля 2012

Вы можете найти вычисление градиента здесь Точно так же, как вы сказали для вычисления градиентов sobel, пример делает это.

...