簡體   English   中英

將Mat元素(uchar)寫入.csv

[英]Writing Mat elements (uchar) to .csv

我想將Mat對象(OpenCV uchar)的內容輸出到.csv文件。

現在,我可以編寫整數和雙精度數,甚至可以編寫uchar,但在Excel中打開csv時,uchar被解釋為字符,因此我無法檢查這些值。 因此,在將它們保存到csv之前,我嘗試將它們轉換為字符串,但是失敗了。

到目前為止,我的代碼:

Ofstream Datalogger(path);
// Some code

for (int i = 0; i< vector1.size();i++)
        {
            Datalogger << i << ";"
                << vector1[i].someint << ";"     
                << vector1[i].somedouble << ";" 

            const uchar* Mi = Mat1.ptr<uchar>(i);
            for(int k = 0; k < Mat1.cols; k++)
            {               
                std::string descr( Mi[k]);
                Datalogger << descr << ";" ; 
            }        
            Datalogger << endl;
        }

但是錯誤代碼是:

1   IntelliSense: no instance of constructor "std::basic_string<_Elem, _Traits, _Alloc>::basic_string [with _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char>]" matches the argument list argument types are: (const uchar)

這可能意味着字符串descr()無法接受uchar。

任何想法如何將內容記錄到.csv並能夠查看uchar的數值,而不是由Excel解釋為特殊字符?

好的,因為不需要真正的字符串,只需要能夠在Excel中讀取數字值,我就簡單地將其強制轉換為int。

for (int i = 0; i< vector1.size();i++)
        {
            Datalogger << i << ";"
                << vector1[i].someint << ";"     
                << vector1[i].somedouble << ";" 

            const uchar* Mi = Mat1.ptr<uchar>(i);
            for(int k = 0; k < Mat1.cols; k++)
            {               
                int descr = int( Mi[k]);
                Datalogger << descr << ";" ; 
            }        
            Datalogger << endl;
        }

cv :: format()可能也有用:

cv::Mat M = cv::Mat::ones(3, 3, CV_8UC3);
std::cout << cv::format(M, "csv") << std::endl;

還有一些其他選項可以將輸出打印/格式化為輸出:
http://docs.opencv.org/doc/tutorials/core/mat_the_basic_image_container/mat_the_basic_image_container.html#output-formatting

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM