2014-12-17 2 views
0

CV_32FC4cv::Mat에 사용하려고 시도 했으므로 RGBA32 이미지를 저장합니다. 그러나 cv::imwrite을 사용하여 png 파일로 저장하면 결과 파일은 항상 비어 있습니다. 이미지입니다.cv :: imwrite는 CV_32FC4를 저장하지 않습니다. cv :: Mat

예를 들어,이 같은 이미지를 만들 : 당신은 단지 부동 또는 더블, PNG로/USHORT 유형을하지 UCHAR 저장할 수 있습니다

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. 
+2

doc (정말 도움이됩니다) : http://docs.opencv.org/modules/highgui /doc/reading_and_writing_images_and_video.html#imwrite imwrite'PNG, JPEG 2000 및 TIFF의 경우 8 비트 (또는 16 비트 부호없는 (CV_16U)) 단일 채널 또는 3 채널 ('BGR'채널 순서 사용) 이미지 만 이 함수를 사용하여 저장할 수 있습니다. ' – Micka

+0

@Micka 실제로 CV_32FC3 파일을 성공적으로 저장했습니다. – Clones1201

답변

1

.

사용 : 당신은 정밀도를 유지해야하고 매트가 매우 작은 경우

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

이 FileStorage를 사용하고 텍스트 파일 쓰기 :

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

, 읽기 그것 뒤 :

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