2011-02-16 16 views
1

我需要修改mjpeg文件的每個jpg-image。從MJPEG文件中提取靜止圖像?

我不得不使用Visual Studio C++ 2010

到目前爲止,我需要一個)加載來自源的MJPEG文件和b)提取位圖(的CImage,字節數組,...)

在僞代碼應該是這樣的:

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

什麼是解決這個問題的一個辦法了? 我已經嘗試過OpenCV2.1.0,但總是有一個LNK2001錯誤。 (Tutorial官方網站)。

OpenCV是正確的方式還是沒有人知道一種更容易的方式?

回答

1

你想使用視頻中的JPEG圖像還是會解壓縮它們?

MJPEG流包含許多JPEG圖像,沒有通常的JPEG標頭(​​和代碼字典)。所以如果你想無損提取它們並在目錄中獲得大量的JPEG文件,另一種工具可能更適合你。

但是,如果您要修改它們,則需要對它們進行解壓縮。只要你有必要的後端來解碼數據流(Windows的一些編解碼器......在Linux上,ffmpeg庫將爲你解碼幾乎所有東西),OpenCV是一個很好的方法。

所以我會做這樣的事情:

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的),不要忘記將路徑添加到庫中。

+0

MPEG解碼器是默認的解碼器之一 - openCV現在可以在Windows上使用ffmpeg編譯 – 2011-12-13 15:54:42

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