2014-10-18 3 views
2

Я пытаюсь загрузить изображение из трубы, такие как, стандартного ввода имени трубы и т.д.OpenCV: Не удалось прочитать файл из трубы

Это мой пример кода:

#include «opencv2 /opencv.hpp "

использование пространства имен cv;

INT основной (интермедиат ARGC, символ ** ARGV) {

Mat img; 
    if(argc > 1) img = imread(argv[1]); 
    else img = imread("/dev/stdin"); 
    printf("rows = %d, cols = %d\n", img.rows, img.cols); 
    imshow("original", img); 
    while (waitKey(1) != 'q'); 
    return 0; 

}

./a.out image.jpg 

будет работать, но

./a.out < image.jpg 

и

mkfifo img.pipe 
./a.out img.pipe 
cat image.jpg > img.pipe 

не работает, а строки и столбцы Mat img равны 0.

В чем разница между реальным файлом и трубой?

ответ

0

Функция imread предназначена для считывания изображения с блочного устройства, а не потокового устройства. локальный файл имеет блок, а труба имеет поток, поэтому функция imread не может читать изображение из труб, розетки и т. д.

+0

Спасибо, raison! Таким образом, это означает, что 'imread' использует некоторые функции, такие как файл с произвольным доступом, который поддерживается блочными устройствами, но не потоковыми устройствами? – wing

+0

@wing, вот и все. –

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

  • Нет связанных вопросов^_^