2011-08-02 12 views
29

Jak przekonwertować cv :: Mat typu CV_32FC1 na typ CV_64FC1 (odpowiednik zmiany z wartości zmiennoprzecinkowej na podwójną)?Konwersja macierzy typu CV_32FC1 na CV_64FC1

Otwieram macierz zapisaną jako XML (cvSave), ale jako zmienną. Oznacza to, że pole <dt> ma w pliku wartość f. Muszę go zmienić na d, aby go otworzyć. Ale wolałbym tego nie robić, zamiast tego chciałbym otworzyć go bezpośrednio jako Matrix z elementami typu double lub przekonwertować go później z float na double.

Poniżej znajduje się mój kod do otwierania pliku.

/** Load cv::Mat from XML file. 
*/ 
cv::Mat loadMat(const std::string filename) 
{ 
    cv::Mat result; 
    cv::FileStorage fs(filename, cv::FileStorage::READ); 
    fs.getFirstTopLevelNode() >> result; 
    return result; 
} 

Odpowiedz

51

Dobra, jestem głupkiem. Oto, jak to działa:

Istnieje funkcja convertTo, która robi dokładnie to, co chcę.

Dziękujemy za zgłoszenie tego przez matrix type conversion in opencv.

Oto jak to zrobić:

cv::Mat A = loadMat("mymat.xml"); // See function loadMat in the question! 
A.convertTo(A, CV_64F); 
+6

Ponadto, jeśli konwersja z czegoś podobnego do 8U 16U, trzeba dodać współczynnik skalowania jako trzeci parametr. 'A.convertTo (A, CV_8UC1, 255.0/65536.0);' –

Powiązane problemy