2016-07-06 55 views
1

我在OpenCV中有一些算法,我想用定點值表示來重寫它。我在這裏找到了定點算術類:https://github.com/eteran/cpp-utilities。我想知道是否有一些優雅的方式將Mat_模板類與Fixed類對象(或任何自定義類)一起用作Mat的內容。當我使用:有沒有辦法將OpenCV Mat_與自定義類一起使用?

cv::Mat_<cv::Vec<Fixed<12, 4>, 3>> num; 

我收到以下錯誤:

Error C2039 'value' : is not a member of 'cv::DataDepth<numeric::Fixed<0x0c,0x04>>' opencv_hog D:\libs\x64\opencv_2_4_13\build\include\opencv2\core\core.hpp 1134 
Error C2065 'value' : undeclared identifier opencv_hog D:\libs\x64\opencv_2_4_13\build\include\opencv2\core\core.hpp 1134 
Error C2039 'fmt' : is not a member of 'cv::DataDepth<numeric::Fixed<0x0c,0x04>>' opencv_hog D:\libs\x64\opencv_2_4_13\build\include\opencv2\core\core.hpp 1135  
Error C2065 'fmt' : undeclared identifier opencv_hog D:\libs\x64\opencv_2_4_13\build\include\opencv2\core\core.hpp 1135  
Error C2056 illegal expression opencv_hog D:\libs\x64\opencv_2_4_13\build\include\opencv2\core\core.hpp 1135 
+2

你可能想看看這個文檔: http://www.docs.opencv.org/ref/master /d0/d3a/classcv_1_1DataType.html#gsc.tab=0 我認爲你應該定義一個模板專門化使用它。 –

+0

感謝您的建議!我已經試圖做出你所說的,下面的結果,回答我的問題。 – BartekM

回答

0

正如在評論中提到的,我需要定義模板特殊化:

template<size_t I, size_t F> class cv::DataType<Fixed<I, F>> 
{ 
public: 
    typedef Fixed<I, F> value_type; 
    typedef Fixed<I, F> work_type; 
    typedef Fixed<I, F> channel_type; 
    enum { 
     channels = 1, 
     depth = I + F, 
     type = CV_MAKETYPE(depth, channels) 
    }; 
}; 

到目前爲止,似乎工作正常。例如,我可以寫:

cv::Mat_<Fixed<13, 3>> fixed = cv::Mat_<Fixed<13, 3>>::zeros(10, 10); 
fixed(1, 1) = 2.4; 
std::cout << fixed(0, 0) << std::endl; 
std::cout << fixed(1, 1) << std::endl; 

,這將輸出:

0.0 
2.375 
相關問題