[英]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.