2011-06-27 4 views
0

У меня есть следующий тип данных в текстовом файле (число строк = 4000, число столбцов = 141). Первый элемент 5 * 5 этих данных здесь, чтобы дать вам идею:Opencv: от плавающей точки до

1.05E-01 1.05E-01 1.04E-01 1.04E-01 1.04E-01 
1.03E-01 1.04E-01 1.04E-01 1.03E-01 1.04E-01 
1.04E-01 1.04E-01 1.04E-01 1.04E-01 1.03E-01 
1.04E-01 1.04E-01 1.05E-01 1.04E-01 1.04E-01 
1.03E-01 1.03E-01 1.04E-01 1.05E-01 1.03E-01 

Я хочу сделать полутоновое изображение с этими данными.

  1. Как я могу масштабировать данные до подачи в openCV?

  2. Как я могу сгенерировать выходные данные размером 512 X 512?

  3. Каковы неправильные значения при использовании следующего кода?

    IplImage *img = (cvSize(4000, 141), IPL_DEPTH_32F, 1); 
    
    freopen ("D:\\input.txt", "r", stdin); 
    int i; 
    float data; 
    for (i = 0; i < img->width * img->height ; i++) 
    { 
        scanf("%e",&data); 
          data*=2500;//for scaling data roughly 
        ((float*)img->imageData)[i] =data; 
    } 
    
    cvNamedWindow ("image", 1); 
    
    cvShowImage ("image", img); 
    
    cvWaitKey (0); 
    
    cvReleaseImage (&img); 
    
    cvDestroyWindow("image"); 
    
+0

Я предпочел бы увидеть шестнадцатеричный дамп первых 200 байт. – karlphillip

ответ

0

одна Эта строка генерирует ошибку компиляции:

IplImage *img = (cvSize(4000, 141), IPL_DEPTH_32F, 1); 

Я уверен, что вы хотели поставить cvCreateImage() там, но если вы хотите серьезной помощи, чем вы лучше пост хороший кода (и хороший код, как правило, свободен от ошибок или очень близок к этому).

  1. Почему бы не передать эти данные в OpenCV, а затем использовать OpenCV для масштабирования изображения?

  2. Вы можете использовать cvResize(), чтобы изменить размер вашего изображения.

  3. Я понимаю, что это изображение в оттенках серого, потому что вы создаете его только с одним каналом. Ваши значения должны быть в диапазоне от 0.0 до 1.0 для изображений IPL_DEPTH_32F, поэтому убедитесь в этом.

Смежные вопросы