🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
g++

g++はGNUコンパイラコレクション(gcc)のC++コンパイラーです。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

7458閲覧

OpenCVでVideoCaptureを使って動画を読み込めない

CreeperSaviour

総合スコア129

g++

g++はGNUコンパイラコレクション(gcc)のC++コンパイラーです。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/11/10 05:33

発生している問題

https://www.trifields.jp/how-to-install-opencv-on-ubuntu-2742を参考にしてOpenCV 3.3をインストールして、同サイトのサンプルプログラムをコンパイル・実行し成功したので、http://kivantium.hateblo.jp/entry/2014/11/25/230658を写経してOpenCVを勉強しようと思い、まずVideoCaptureを使って動画を読み込めるかを試すために以下のコードをコンパイルし、実行してみました。

terminal

1$ cat main.cpp 2#include <opencv2/opencv.hpp> 3 4using namespace std; 5using namespace cv; 6 7int main() { 8 9 string path = "./video.mp4"; 10 ifstream ifs(path); 11 if(ifs.is_open()) cout << "exist" << endl; 12 else cout << "not exist" << endl; 13 14 VideoCapture video("./video.mp4"); 15 16 if(!video.isOpened()) { 17 cout << "Video not found!" << endl; 18 return -1; 19 } 20 21 return 0; 22} 23$ g++ main.cpp -o out `pkg-config --cflags opencv` `pkg-config --libs opencv` 24$ ./out 25exist 26Video not found!

というふうにビデオを読み込めないので困っています。自分なりにGoogle検索を使って調べてヒットした情報を試してみました。それは以下の「試したこと」に記載しておきます。数日調べてみても解決しなかったため質問させて頂きました。何卒よろしくおねがいします。

試したこと

USBカメラを使って試してみる → USBカメラを持っていないので試せない
相対パスで指定するのではなく絶対パスで指定してみる → 変わらず

以下、調べていた時に気になったところ


https://stackoverflow.com/questions/8414947では、

A missing OpenCV's ffmpeg.dll does not generate any warnings/errors in OpenCV 2.3.1, and code fails silently. Make sure that you have proper opencv_ffmpeg*.dll in your path.

(訳) ffmpeg.dllが存在していない場合、警告を表示せずに動画の読み込みに失敗する?

https://ja.stackoverflow.com/questions/32443/mp4ファイルの読み込みでは、

opencv_ffmpeg310.dllを他のdll同様にexeと同一フォルダに配置したところ普通に読み込めました。

と書かれていたので、opencv_ffmpeg310.dllが存在するか調べるために、以下のコマンドをterminalで実行しましたが、

$ sudo find / -name 'opencv_ffmpeg310.dll'

opencv_ffmpeg310.dllがディスク内では見つかりませんでした。(本来はこのファイルが無いと読み込めない?)


補足情報

Ubuntu 19.10
OpenCV 3.3.0
g++ (Ubuntu 9.2.1-9ubuntu2) 9.2.1 20191008
ffmpeg version 4.1.4-1build2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazto

2019/11/10 11:09

ubuntuであれば、拡張子は.dllではなく.soです。もう一度探しなおしてみてはいかがでしょうか。
CreeperSaviour

2019/11/10 12:40

OpenCV3.3なのでファイル名はopencv_ffmpeg330.soになるかと思い、どちらとも検索してみましたが見つかりませんでした。
guest

回答1

0

自己解決

解決しました。

ffmpegを

sudo apt install ffmpeg

でインストールしたのが原因だと思っています。

https://stackoverflow.com/questions/25539034/opencv-make-fails-recompile-with-fpic/27113749
ここで、ffmpegをコンパイルするときに

./configure --enable-nonfree --enable-pic --enable-shared

とするように書いていたので、

wget http://ffmpeg.org/releases/ffmpeg-4.2.tar.bz2 tar xjf ffmpeg-4.2.tar.bz2 cd ffmpeg-4.2 ./configure --enable-nonfree --enable-pic --enable-shared make sudo make install

これを試してみたところ問題なく実行できました。
ありがとうございました。

投稿2019/11/11 15:38

CreeperSaviour

総合スコア129

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問