1

我需要修改 mjpeg 文件的每个 jpg 图像。

我必须使用 Visual Studio C++ 2010。

到目前为止,我需要 a)从源加载一个 mjpeg 文件,b)提取一个位图(CImage,字节数组,...)

在伪代码中,它应该如下所示:

fun getBitmap(filename, timestamp)
{
  MJPEG myInput = Open(filename);
  BITMAP myOutput = myInput.getBitmap(timestamp);
  return myOutput;
}

有什么办法可以解决这个问题?我已经尝试过使用 OpenCV2.1.0,但总是出现 LNK2001 错误。(来自官方网站的教程)。

OpenCV 是正确的方法还是有人知道更简单的方法?

4

2 回答 2

1

您想在视频中使用 JPEG 图像还是将它们解压缩?

MJPEG 流由许多 JPEG 图像组成,没有通常的 JPEG 标头(和代码字典)。因此,如果您想无损提取它们并在一个目录中获取大量 JPEG 文件,其他工具可能更适合您。

但是,如果您仍然要修改它们,则需要解压缩它们。只要您有必要的后端来解码流,OpenCV 就是一种很好的方法(一些适用于 Windows 的编解码器......在 Linux 上,ffmpeg 库将为您解码几乎所有内容)。

所以我会做这样的事情:

CvCapture *capture = cvCaptureFromFile("filename.avi");
IplImage *current_frame = NULL;
while(current_frame = cvQueryFrame(capture)) {
  process(current_frame); // that's your modification code
}

看到这个:

http://opencv.willowgarage.com/documentation/c/highgui_reading_and_writing_images_and_video.html

对于链接器错误:LNK2001 是“未解析的外部符号”,所以...您添加了库吗?(附加依赖项,添加所有四个库(cv210.lib cxcore210.lib、cvaux210.lib 和 highgui210.lib,或者...检查您的 OpenCV 安装以获取正确的名称)。确保您的项目编译为 32 位(或相同)作为 OpenCV),并且不要忘记添加库的路径。

于 2011-02-18T21:05:59.497 回答
1

使用 gstreamer 工具

对于基于 ip 的源

gst-launch souphttpsrc location="http://[ip]:[port]/[dir]/xxx.cgi" do-timestamp=true is_live=true ! multipartdemux ! jpegdec !  videoflip method=vertical-flip ! jpegenc !  multifilesink location=image-out-%05d.jpg

用于带有 mjpeg 编解码器和 avi 容器的文件源

gst-launch filesrc location="xyz.avi" ! multipartdemux ! jpegdec !  videoflip method=vertical-flip ! jpegenc !  multifilesink location=image-out-%05d.jpg
于 2011-12-12T20:28:50.157 回答