簡體   English   中英

cv :: imwrite不保存CV_32FC4 cv :: Mat

[英]cv::imwrite doesn't save CV_32FC4 cv::Mat

我正在嘗試在cv::Mat使用CV_32FC4 ,以便它存儲RGBA32圖像。 但是當我使用cv::imwrite將其另存為png文件時,結果文件始終為圖像。

例如,我創建這樣的圖像:

   cv::Mat f4(50, 50, CV_32FC4);

   for (int i = 0; i < 50 * 50; ++i)
   {
      *(FLOAT4*)(f4.data + i * sizeof(FLOAT4)) = FLOAT4(i % 50 / 50.0f, i / 2500.0f, 0.0f, 1.0f);
   }  
   cv::imwrite("32FC4.png", f4); //"32FC4.png" will be an empty image file, 
                                 //size is 249 B, not white or black,
                                 //a transparent image.

您只能將uchar / ushort類型保存為png,不能將float和double保存。

采用:

Mat bgra8;
f4.convertTo(bgra8, CV_8UC4, some_scale_factor);
imwrite("my.png", bgra8);

如果您需要保持精度,並且Mat很小,請使用FileStorage並寫入文本文件:

FileStorage fs("my.yml",FileStorage::WRITE);
fs << "f4" << f4;
fs.release();

稍后,請重新閱讀:

Mat f4;
FileStorage fs("my.yml",FileStorage::READ);
fs["f4"] >> f4;

暫無
暫無

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

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