【问题标题】:OpenCV: Failed to read image from pipeOpenCV:无法从管道读取图像
【发布时间】:2014-12-13 15:47:57
【问题描述】:

我正在尝试从标准输入、命名管道等管道加载图像。

这是我的示例代码:

#include "opencv2/opencv.hpp"

使用命名空间 cv;

int main(int argc, char **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。

真实文件和管道有什么区别?

【问题讨论】:

    标签: c++ macos opencv


    【解决方案1】:

    函数imread是从块设备读取图像,而不是从流设备读取。本地文件是块的,管道是流的,这就是为什么函数imread不能从管道、套接字等读取图像。

    【讨论】:

    • 谢谢你的理由!那么,这意味着imread使用了一些块设备支持但流设备不支持的功能,例如随机访问文件?
    猜你喜欢
    • 2021-05-15
    • 2010-12-04
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 2019-04-16
    • 1970-01-01
    相关资源
    最近更新 更多