Каков диапазон изображения RAW в Linux? - PullRequest
0 голосов
/ 17 мая 2018

Я хочу обработать поток веб-камеры. Это должно быть быстро, поэтому я использую формат RAW для изображений. После этого Как захватить неподвижное изображение с веб-камеры на Linux Я создал аналогичную программу.

#include <stdio.h>
#include <stdlib.h>
#include <float.h>

const int SIZE=320*240;
int main(){
FILE* camera, *output;
camera=fopen("/dev/video0","rb");
output=fopen("image.raw","wb");
float data[SIZE];
fread(data,sizeof(float),SIZE,camera);
float max=FLT_MAX;
for(int i=0;i<SIZE;i++){
data[i]=max-data[i];
}
fwrite(data,sizeof(float),SIZE,output);
fclose(camera); 
fclose(output);
return 0;
}

Когда я опускаю строку, которая изменяет данные (data [i] = max-data [i];), все работает нормально, я получаю изображение в необработанном формате, соответствующем потоку веб-камеры. Но я хочу сделать простую обработку, как порог и там, инвертировать цвета изображения. Тем не менее, FLT_MAX, кажется, не является решением, поскольку применение (data [i] = max-data [i]) дает мне изображение мусора (все еще читаемое программным обеспечением для чтения изображений, но не более человеческого глаза. См. corrupted image. Таким образом, мой вопрос: каков диапазон значений с плавающей запятой, которые описывают изображение RAW

РЕДАКТИРОВАТЬ: Я попытался немного подумать, я изменил строку, которая обрабатывает изображение к данным [i] = data [SIZE-i]; и получил горизонтальное зеркальное изображение, так что я думаю, что формат изображения в 1 float на пиксель, все еще не знает диапазон.

...