欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決C++ openCV無法讀取視頻但是可以讀取圖像的問題記錄

 更新時(shí)間:2024年09月10日 11:18:11   作者:路人甲ing..  
在使用OpenCV的cv::VideoCapture讀取視頻文件時(shí),可能會(huì)遇到無法讀取特定格式,如MP4的視頻文件的問題,本文介紹解決C++ openCV無法讀取視頻但是可以讀取圖像的問題記錄,感興趣的朋友跟隨小編一起看看吧

C++代碼中使用 cv::VideoCapture 讀取視頻文件時(shí),視頻文件路徑正確,依然無法讀取視頻。
我的發(fā)現(xiàn)并解決過程(簡(jiǎn)易版):

1. 確保圖片可以正常讀取

路徑正確!
有讀取權(quán)限!
讀取圖像可以成功!

2. 檢查 OpenCV 編譯配置

確保 OpenCV 支持 MP4 格式的視頻解碼。你可以檢查 OpenCV 編譯時(shí)是否啟用了 FFmpeg:
bash cv::getBuildInformation()
查看是否包含 FFmpeg,如果沒有,你可能需要重新編譯 OpenCV 支持 FFmpeg。

果然把上面的結(jié)果打印出來沒看到的FFmpeg相關(guān)的內(nèi)容,大概鎖定原因??赡苁菬o法讀取 MP4 文件的關(guān)鍵原因。在 OpenCV 中,MP4 文件的讀取通常依賴 FFmpeg 庫(kù)來進(jìn)行解碼。

3. 解決方法1:重新編譯 OpenCV,啟用 FFmpeg

需要重新編譯 OpenCV,并確保包含 FFmpeg 支持。編譯步驟大致如下:

  • 下載 FFmpeg 源碼并進(jìn)行編譯,生成靜態(tài)或動(dòng)態(tài)庫(kù)。
  • 重新編譯 OpenCV 時(shí),確保啟用了 FFmpeg 支持:
cmake -D CMAKE_BUILD_TYPE=Release \
      -D CMAKE_TOOLCHAIN_FILE=<your_android_toolchain> \
      -D WITH_FFMPEG=ON \
      -D OPENCV_ENABLE_NONFREE=ON \
      -D BUILD_opencv_videoio=ON \
      -D BUILD_opencv_highgui=ON \
      <other_flags> \
      ..

確保 WITH_FFMPEG=ON,并且 BUILD_opencv_videoio=ON。

或在 CMakeLists.txt 中,指定 FFmpeg 的路徑:

cmake -DWITH_FFMPEG=ON -DFFMPEG_DIR=/path/to/ffmpeg ..

4. 解決方法2:檢查其他視頻 I/O 支持(不推薦)

如果不想重新編譯 OpenCV,的確有點(diǎn)麻煩。如果在Android平臺(tái)運(yùn)行,則可以使用 Android 的原生 API(如 MediaPlayerMediaCodec)來加載視頻,并將每一幀轉(zhuǎn)換為 OpenCV 可處理的格式(如 cv::Mat)。

5. 解決方法3:使用圖片序列替代視頻(不推薦)

如果不需要處理原始視頻,可以使用之前提到的圖片序列方案,將視頻轉(zhuǎn)換為幀圖片,再通過 OpenCV 逐幀讀取。

6. 解決方法4:使用特定格式的視頻文件(推薦?。。。?/h2>

OpenCV 可以處理不依賴 FFmpeg 的視頻格式,例如:

  • MJPEG (Motion JPEG):這是一個(gè)簡(jiǎn)單的編碼格式,基本上就是一組 JPEG 圖片組成的視頻流。(推薦直接用這個(gè),直接可以預(yù)覽,文件也小,方便遷移)
  • RAW 格式:如果你能將視頻轉(zhuǎn)碼為 AVI 的 RAW 格式(沒有壓縮),那么 OpenCV 通常能夠直接讀取。(這個(gè)賊大,好不一定可以直接預(yù)覽,略不方便)

可以通過系統(tǒng)指令或者python腳本直接進(jìn)行視頻格式的轉(zhuǎn)換,這樣你的avi視頻就可以直接被opencv讀取了而且不依賴FFmpeg。

下面我直接給出了Python轉(zhuǎn)視頻格式的例子:

可以借助 ffmpeg-python 庫(kù)將 MP4 格式的視頻轉(zhuǎn)換為 MJPEG 或 RAW AVI 格式。ffmpeg-python 是 FFmpeg 的 Python 封裝,提供了簡(jiǎn)單的接口來調(diào)用 FFmpeg。

首先,需要安裝 ffmpeg-python 庫(kù):

pip install ffmpeg-python

然后,可以使用以下 Python 代碼將 MP4 視頻轉(zhuǎn)換為 MJPEG 和 RAW AVI 格式:

轉(zhuǎn)換為 MJPEG 格式

import ffmpeg
input_file = '/path/to/input.mp4'
output_file_mjpeg = '/path/to/output_mjpeg.avi'
ffmpeg.input(input_file).output(output_file_mjpeg, vcodec='mjpeg', qscale_v=2).run()

轉(zhuǎn)換為 RAW AVI 格式

import ffmpeg
input_file = '/path/to/input.mp4'
output_file_raw = '/path/to/output_raw.avi'
ffmpeg.input(input_file).output(output_file_raw, vcodec='rawvideo', pix_fmt='yuv420p').run()

到此這篇關(guān)于解決C++ openCV無法讀取視頻但是可以讀取圖像的文章就介紹到這了,更多相關(guān)C++ openCV無法讀取視頻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 用C語言完整實(shí)現(xiàn)2048游戲

    用C語言完整實(shí)現(xiàn)2048游戲

    2048是一款數(shù)字益智游戲,初始數(shù)字則是由2+2組成的基數(shù)4。在操作方面的不同則表現(xiàn)為一步一格的移動(dòng),變成更為爽快的一次到底。相同數(shù)字的方?jīng)r在靠攏、相撞時(shí)會(huì)相加。系統(tǒng)給予的數(shù)字方塊不是2就是4,玩家要想辦法在這小小的16格范圍中湊出2048這個(gè)數(shù)字方塊
    2021-11-11
  • 最新評(píng)論