2016-09-22 3 views
0

Я пытаюсь получить Ориентационную гистограмму из результата фазы() Метод из CV. Я стараюсь, чтобы получить округлую ориентацию каждого пикселя и разделить его на 10. Так что это будет выглядеть так, что, например, для 5x5 Pixel Patch:Получить ориентировочную гистограмму из пиксельного патча OpenCV

{ 1 36 20 3 14 
5 16 11 6 9 
7 12 34 22 0 
34 5 9 21 4 
5 21 28 30 1} 

Моя проблема в том, что я действительно не знаю, как проверить каждый пиксель патча, а затем получить OrientationValue для вычисления значения для гистограммы.

Мой код для получения ориентации Mat выглядит следующим образом:

Mat patch = src(Rect(px,py,15,15)); 

Mat Sx; 
Sobel(patch, Sx, CV_32F, 1, 0, 3); 

Mat Sy; 
Sobel(patch, Sy, CV_32F, 0, 1, 3); 

Mat mag, ori; 
magnitude(Sx, Sy, mag); 
phase(Sx, Sy, ori, true); 

int** hist; 

В переменной Hist я хочу добавить значения с помощью другого метода. Надеюсь, кто-то поймет, о чем я думаю, и могу помочь мне.

У меня есть план сейчас, как Перебрать данную ориентацию изображения я использую цикл, который показан в документации OpenCV Docu

for(i = 0; i < ori.rows; i++){ 
    for(j = 0; j < ori.cols; j++){ 
     cout << ori.at<uchar>(i,j) << endl; 
    } 
} 

Но доступ к ценностям как это обыкновению давать мне ценностную ориентацию. Любые подсказки?

+1

Ori от типа CV_32F не CV_8U, поэтому попробовать 'ori.at (I, J)' или преобразовать Sx с 'convertScaleAbs ' – PSchn

+0

convertScaleAbs не работает, потому что' phase() 'нуждается в значениях флэотинга, поэтому забудьте об этом – PSchn

+0

Он работает спасибо! Не знаю, как я мог это контролировать. –

ответ

1

Ori от типа CV_32F не CV_8U, поэтому пытаются получить доступ к ori.at<float>(i,j) ро ориентация значения