Я пытаюсь выполнить оценку ориентации входного изображения в OpenCV. Я использовал функцию sobel для получения градиентов изображения и использовал другую функцию под названием calculateOrientations
, которую я нашел в Интернете, для расчета ориентации.
Код выглядит следующим образом:
void computeGradient(cv::Mat inputImg)
{
// Gradient X
cv::Sobel(inputImg, grad_x, CV_16S, 1, 0, 5, 1, 0, cv::BORDER_DEFAULT);
cv::convertScaleAbs(grad_x, abs_grad_x);
// Gradient Y
cv::Sobel(inputImg, grad_y, CV_16S, 0, 1, 5, 1, 0, cv::BORDER_DEFAULT);
cv::convertScaleAbs(grad_y, abs_grad_y);
// convert from CV_8U to CV_32F
abs_grad_x.convertTo(abs_grad_x2, CV_32F, 1. / 255);
abs_grad_y.convertTo(abs_grad_y2, CV_32F, 1. / 255);
// calculate orientations
calculateOrientations(abs_grad_x2, abs_grad_y2);
}
void calculateOrientations(cv::Mat gradientX, cv::Mat gradientY)
{
// Create container element
orientation = cv::Mat(gradientX.rows, gradientX.cols, CV_32F);
// Calculate orientations of gradients --> in degrees
// Loop over all matrix values and calculate the accompagnied orientation
for (int i = 0; i < gradientX.rows; i++){
for (int j = 0; j < gradientX.cols; j++){
// Retrieve a single value
float valueX = gradientX.at<float>(i, j);
float valueY = gradientY.at<float>(i, j);
// Calculate the corresponding single direction, done by applying the arctangens function
float result = cv::fastAtan2(valueX, valueY);
// Store in orientation matrix element
orientation.at<float>(i, j) = result;
}
}
}
Теперь мне нужно убедиться, что полученная ориентация верна или нет. Для этого я хочу нарисовать стрелки для каждого блока размером 5x5 на матрице ориентации. Может ли кто-нибудь посоветовать мне, как рисовать стрелки на этом? Спасибо.
<float>
или на каком-то изображении BGR? Возможно, вы можете нарисовать стрелку на черном изображении, а затем для каждого значения ориентации вычислить угол поворота и деформировать стрелку в положение выходного изображения. Или создайте функцию для рисования повернутой стрелки в какое-то место... - person Micka   schedule 15.01.2015