OpenCV 从标准输入加载图像/视频

2023-12-01

我正在尝试使用以下代码从 stdin 读取 jpg 图像:

int c,count=0;
vector<uchar> buffer; //buffer for coding

/* for stdin, we need to read in the entire stream until EOF */
while ((c = fgetc(stdin)) != EOF) {
     buffer.push_back(c);
 count++;
}


cout << "Bytes: " << count << endl;
Mat im = imdecode(Mat(buffer),CV_LOAD_IMAGE_COLOR);
cout << "Decoded\n";
namedWindow("image", CV_WINDOW_AUTOSIZE);
imshow("image",im);

cv::waitKey(0);

我在cmd中运行这个:

OpenCVTest < thumb.jpg

这就是我得到的:

Bytes: 335
Decoded
OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in unknown function, file ..\..\..\src\opencv\modules\core\src\array.cpp, line 2482

该错误似乎是合理的,因为图像约为 7 KB,但根据计数器仅读取了 335 字节。

我究竟做错了什么 ?

我的最终目标是从标准输入逐帧读取视频。这可能吗?

非常感谢 !


下面从 stdin 逐帧读取 jpeg 序列。例子:

ffmpeg

ffmpeg -i input.mp4 -vcodec mjpeg -f image2pipe -pix_fmt yuvj420p -r 10 -|program.exe

mencoder

mencoder input.mp4 -nosound -ovc lavc -lavcopts vcodec=mjpeg -o -|program.exe

curl

curl "http://10.10.201.241/mjpeg/video.cgi&resolution=320x240"|program.exe

code

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;

#if defined(_MSC_VER) || defined(WIN32)  || defined(_WIN32) || defined(__WIN32__) \
    || defined(WIN64)    || defined(_WIN64) || defined(__WIN64__)
# include <io.h>
# include <fcntl.h>
# define SET_BINARY_MODE(handle) setmode(handle, O_BINARY)
#else
# define SET_BINARY_MODE(handle) ((void)0)
#endif

#define BUFSIZE 10240
int main ( int argc, char **argv )
{

    SET_BINARY_MODE(fileno(stdin));
    std::vector<char> data;
    bool skip=true;
    bool imgready=false;
    bool ff=false;
    int readbytes=-1;
    while (1)
    {   
        char ca[BUFSIZE];
        uchar c;
        if (readbytes!=0)
        {
            readbytes=read(fileno(stdin),ca,BUFSIZE);
            for(int i=0;i<readbytes;i++)
            {
                c=ca[i];
                if(ff && c==(uchar)0xd8)
                {
                    skip=false;
                    data.push_back((uchar)0xff);
                }
                if(ff && c==0xd9)
                {
                    imgready=true;
                    data.push_back((uchar)0xd9);
                    skip=true;
                }
                ff=c==0xff;
                if(!skip)
                {
                    data.push_back(c);
                }
                if(imgready)
                {
                    if(data.size()!=0)
                    {
                        cv::Mat data_mat(data);
                        cv::Mat frame(imdecode(data_mat,1));

                        imshow("frame",frame);
                        waitKey(1);
                    }else
                    {
                        printf("warning");
                    }
                    imgready=false;
                    skip=true;
                    data.clear();
                }
            }
        }
        else
        {
            throw std::string("zero byte read");
        }
    }
}    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV 从标准输入加载图像/视频 的相关文章

  • 如何在opencv python中为图像添加边框

    如果我有如下图所示的图像 如何在图像周围添加边框 以便最终图像的整体高度和宽度增加 但原始图像的高度和宽度保持在中间 下面的代码添加了一个大小恒定的边框10像素到原始图像的所有四个边 对于颜色 我假设您想要使用背景的平均灰度值 这是我根据图
  • 来自 OpenCV 的外部参数

    我正在使用 OpenCV 来校准立体相机对 我拍摄了各种校准照片 并且使用 cv2 calibrateCamera 对内在参数进行了令人满意的拟合 然而 目前尚不清楚如何获取外部参数 该函数仅返回cameraMatrix 尽管它很有用 但实
  • Python中最相似的人脸识别

    如何使用Python和OpenCV来查找面部相似 我已成功使用 OpenCV 和 Python 使用 Haar Cascades 从多张照片中提取人脸 我现在有一个图像目录 所有这些都是不同人的面孔 我想做的是拍摄一张样本图像 然后看看它最
  • OpenCV 仅围绕大轮廓绘制矩形?

    第一次发帖 希望我以正确的方式放置代码 我正在尝试检测和计算视频中的车辆 因此 如果您查看下面的代码 我会在阈值处理和膨胀后找到图像的轮廓 然后我使用 drawContours 和矩形在检测到的轮廓周围绘制一个框 我试图在 drawCont
  • BASH 脚本编译多个 C++ 文件 - OpenCV

    请参见在C 和OpenCV中调用其他文件中的函数 https stackoverflow com questions 24442836 call functions in other files in c and opencv 对于最初的问
  • OpenCV Visual Studio ntdll.dll

    我尝试在 Visual Studio 2013 上使用 OpenCV 2 4 10 创建一个项目 但由于以下异常 到目前为止我运气不佳 请建议帮助 TIA letstryitonemoretime exe Win32 Loaded C Us
  • 检查图像中是否有太薄的区域

    我正在尝试验证雕刻机的黑白图像 更多的是剪贴画图像 不是照片 我需要考虑的主要事情之一是区域的大小 或线条的宽度 因为机器无法处理太细的线条 所以我需要找到比给定阈值更细的区域 以此图为例 竖琴的琴弦可能太细而无法雕刻 我正在阅读有关 Ma
  • ffmpeg AVFrame 到 opencv Mat 转换

    我目前正在开发一个使用 ffmpeg 解码接收到的帧的项目 解码后 我想将 AVFrame 转换为 opencv Mat 帧 以便我可以在 imShow 函数上播放它 我拥有的是字节流 我将其读入缓冲区 解码为 AVFrame f fope
  • 为什么我无法在 Mac 12.0.1 (Monterey) 上使用 pip 安装 OpenCV? [复制]

    这个问题在这里已经有答案了 当我尝试使用 python pip 安装 OpenCV 时 它显示了以下内容 Remainder of file ignored Requirement already satisfied pip in Libr
  • minAreaRect OpenCV 返回的裁剪矩形 [Python]

    minAreaRectOpenCV 中返回一个旋转的矩形 如何裁剪矩形内图像的这部分 boxPoints返回旋转矩形的角点的坐标 以便可以通过循环框内的点来访问像素 但是在 Python 中是否有更快的裁剪方法 EDIT See code在
  • OpenCV 2.4.3 中的阴影去除

    我正在使用 OpenCV 2 4 3 最新版本 使用内置的视频流检测前景GMG http docs opencv org modules gpu doc video html highlight gmg gpu 3a 3aGMG GPU算法
  • opencv人脸检测示例

    当我在设备上运行应用程序时 应用程序崩溃并显示以下按摩 java lang UnsatisfiedLinkError 无法加载 detector based tracker findLibrary 返回 null 我正在使用 OpenCV
  • iOS 上的 OpenCV - VideoCapture 属性始终返回 1

    我一直在尝试构建一个简单的 OpenCV iOS 应用程序 该应用程序从捆绑包中加载视频并查询其帧数 持续时间等 然后它将尝试从中获取各个帧 不幸的是 当我使用VideoCapture类中 所有属性返回值 1 然后我尝试导航到frame 1
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 如何使用 opencv.omnidir 模块对鱼眼图像进行去扭曲

    我正在尝试使用全向模块 http docs opencv org trunk db dd2 namespacecv 1 1omnidir html用于对鱼眼图像进行扭曲处理Python 我正在尝试适应这一点C 教程 http docs op
  • YOLOv8获取预测边界框

    我想将 OpenCV 与 YOLOv8 集成ultralytics 所以我想从模型预测中获取边界框坐标 我该怎么做呢 from ultralytics import YOLO import cv2 model YOLO yolov8n pt
  • “没有名为‘cv2’的模块”,但已安装

    我已经安装了包含 opencv 贡献的 whl 文件 因为我想使用 SIFT 算法 我在 conda 环境中使用 pip 安装了它 所以当我在 conda list 中提示时 它会向我显示 opencv python 3 4 5 contr
  • VideoCapture.read() 返回过去的图像

    我在跑python3 6 with openCV on the Raspberry pi OS is Raspbian 代码的大致结构如下 The image以时间间隔 3 5 分钟 捕获 被捕获image在函数中处理并返回度量 精度的种类
  • OpenCv读/写视频色差

    我试图简单地使用 openCV 打开视频 处理帧并将处理后的帧写入新的视频文件 我的问题是 即使我根本不处理帧 只是打开视频 使用 VideoCapture 读取帧并使用 VideoWriter 将它们写入新文件 输出文件看起来比输入更 绿
  • BRISK 特征检测器检测零个关键点

    下面显示的 Brisk 探测器没有给我任何关键点 有人可以提出一个问题吗 我将尝试用一些代码解释我在下面所做的事情 include opencv2 features2d features2d hpp using namespace cv u

随机推荐

  • 通过 postValidate 进行 JSF 跨字段验证,无需在支持 bean 中按名称查找组件

    我正在构建一个登录表单复合组件 使用它的页面将传递一个事件处理程序来验证用户名和密码 通常 不使用复合组件 当我们通过以下方式执行跨字段验证时postValidate 事件处理程序必须按名称查找字段的组件 验证器最好不要这样做 因为这些是应
  • 使用 Locust 每秒预定义请求数

    在查看负载测试工具时 我发现了 Locust 并立即发现它对于 Python 爱好者来说很有吸引力 但我不完全确定我是否可以用它实现以下场景 我的任务是使用真实流量对 REST API 进行负载测试 我从生产 Apache 日志中提取了 5
  • Html Agility Pack - 循环行和列

    如何循环遍历具有属性 id 或名称的表和行 以获取每个 td 单元格深处的内部文本 我从事 asp net c 和最新的 html 敏捷包方面的工作 请指导 谢谢 一个 html 文件有几个表 其中之一具有属性 id main part 在
  • Python 中的匹配模式

    我有一个 XML 文件 其中包含以下字符串
  • numberOfSectionsInTableView 不起作用

    import UIKit class exploreViewController UIViewController UITableViewDelegate UITableViewDataSource IBOutlet weak var se
  • 从 VBScript 中的函数返回引用

    我对 VBScript 已经抓狂了 我到底如何才能将引用作为函数的返回值传递 目前我的代码如下所示 Set objUser FindUser bendert REM Searches Directory for the User Funct
  • RequireJS 有时无法加载 jQuery

    我的项目结构如下 root lib js 在我的 js 文件夹中 我有一个 require config 文件 它引用 lib 目录中的 javascript 文件 就像这样 require config paths jquery lib
  • 使用 sed 移动文本文件中的匹配行

    我正在尝试关注该帖子 如何使用正则表达式匹配 bash 脚本 将文件中的特定行移动到另一个位置 到我的示例文件 asdasd0 SRC OUT DIR a b c d e f g h asdasd2 asdasd3 asdasd4 DEFA
  • ASP.NET 5 客户端依赖管理 - Bower

    我正在尝试使用 MVC 6 的新 ASP NET 5 并且使用 Bower 来管理所有客户端依赖项 一切正常 但我有一个问题 当我添加依赖项时 假设是 jQuery 它添加了 dist and src以及 Bower 配置文件 lib的文件
  • 如何获取模板中 Meteor.call 函数的结果

    我正在尝试制作一个在 Meteor 客户端中使用的分页功能 因此我需要知道服务器上的记录数 在服务器上 在 server bootstrap coffee 中 我有以下代码 Meteor methods ContactsCount gt C
  • 未使用 JavaScript 正确设置 Internet Explorer cookie

    我正在尝试保存 恢复回发上的滚动位置 我的代码适用于 Firefox 和除 Internet Explorer 之外的所有主要浏览器 function saveScrollPosition Save the cookie if the re
  • PHP通过html标签分解字符串

    假设字符串 a 成立 p Phasellus blandit enim eget odio euismod eu dictum quam scelerisque p p Sed ut diam nisi p p Ut vestibulum
  • ssis 中的参数绑定

    如何使用执行包任务动态地将值传递给子包变量 我需要同时从另一个包 父包 调用一个包 子包 在每次调用中 我都需要将不同的值传递给子包变量 I have tried using parameter bindings in Execute Pa
  • 如何让 Phoenix 监听 IPv6?

    我正在努力寻找有关让 Phoenix 以及 Cowboy 和 Ranch 同时监听 IPv4 和 IPv6 的信息 我在 Ubuntu 16 04 的 VPS 上运行 它同时具有 IPv4 和 IPv6 地址 跑步时netstat tulp
  • 在单独的线程中关闭相机设备

    我正在使用 Android Camera2 创建自定义相机 cameraDevice close 方法速度很慢 并且会使 UI 冻结 1 秒 我把它放在另一个线程中 看起来效果很好 我想知道这是否会导致一些严重的问题以及是否有其他方法可以实
  • omp_set_num_threads(1) 比没有 openmp 慢的原因

    相信大家都同意这篇文章的标题 有人能指出我的原因吗 有没有参考书之类的 我试图找到但没有运气 我相信原因是 openmp 有同步开销 没有 openmp 项目没有 希望有人能进一步扩展原因吗 Thanks 虽然即使只有一个线程 使用 Ope
  • BigQuery:如何将库加载到java代码中

    我是 Bigquery 的新开发人员 我正在遵循教程https developers google com bigquery bigquery api quickstart带有 Java 代码和导入的库https developers go
  • JVM是否保证缓存非易失性变量?

    JVM是否保证缓存非易失性变量 程序员是否可以依赖 JVM 始终在本地为每个线程缓存非易失性变量 或者 JVM 可能会也可能不会这样做 因此程序员不应该依赖 JVM 来做到这一点 感谢您提前的答复 不 JVM 不保证非易失性字段的 缓存 J
  • Gremlin - 随机选择一项

    将我视为 用户 1 查询的目的是获取我关注的人 发布 的帖子 并对每个帖子进行检查 是否已被我喜欢过 我关注的其他人是否喜欢它 如果是随机选择其中一位用户返回 样本数据 g addV user property id 1 as 1 addV
  • OpenCV 从标准输入加载图像/视频

    我正在尝试使用以下代码从 stdin 读取 jpg 图像 int c count 0 vector