2014-12-03 5 views
0

Я использую OpenCV для вычисления взаимной корреляции двух строк, взятых из некоторой матрицы X (размер 16x128). Это то, что я сделал:Используйте OpenCV для вычисления взаимной корреляции двух массивов

cv::Mat channel1(1,128,CV_32F, X.row(1).clone());  //take the first row of matrix X 
cv::Mat channel2(1,128,CV_32F, X.row(10).clone()); //take the 10th row of matrix X 
cv::Mat result; 
cvMatchTemplate(channel1,channel2,result, CV_TM_CCORR); 

Однако, я получаю следующее сообщение об ошибке: «Ошибка: не экземпляр конструктора„сорте :: Mat :: Мат“не совпадает со списком аргументов». Может ли кто-нибудь помочь мне решить эту проблему. Заранее спасибо.

+0

X.row (j) * is * уже 1-й ряд Матем. вам не нужно создавать новые вокруг него. (и компилятор прав, нет конструктора с таким значением инициализации). также используйте cv :: matchTemplate, а не c-api cvMatchTemplate! – berak

ответ

0

Есть несколько проблем с кодом вы публикуемым:

1) Там нет Экземпляра сорта :: Mat конструктора, который соответствует пути вы инициализации «канал1» и «CHANNEL2» матрица.

Решение:

  • Объявите ваши матрицы следующим образом:

    cv::Mat channel1(X.row(1).clone());  //take the first row of matrix X 
    cv::Mat channel2(X.row(10).clone()); //take the 10th row of matrix X 
    

2) cvMatchTemplate старый стиль C-апи, и (AFAIK) не является совместимый с C++-ориентированным cv :: Mat.

Решение:

  • (в berak предложил) использовать резюме :: matchTemplate вместо этого.

3) Более того, вы можете использовать matchTemplate непосредственно:

cvMatchTemplate(X.row(1).clone(),X.row(10).clone(),result, CV_TM_CCORR); 

Надеется, что это помогает.