ライブメディアを使ってUSBにubuntu14.04をインストールする。
Win10にOpenCV3.2を導入します。基本的に導入方法はどのバージョンでも同じだと思います。
環境
- Win10
- ubuntu14.04
流れ
- USBメモリを2本用意する。
- UbuntuのISOをダウンロードする。
- Universal USB Installerをダウンロードする。
- Universal USB Installerを使ってUbuntuのISOを1本目のUSBに焼いてライブメディアを作る。(Ubuntuのインストーラ)
- 1本目のUSBを使ってブートして2本目のUSBにUbuntuをインストールする。
USBメモリーを2本用意する。
1本はライブメディア用なので容量はそんなになくて大丈夫です。
もう2本目はUbuntuがインストールされてそこでいろいろ作業するようになるのでそれなりに容量のあるものを用意してください。
UbuntuのISOをダウンロードする。
ここから。
Ubuntu 14.04 LTS 日本語 Remix リリース | Ubuntu Japanese Team
Universal USB Installerをダウンロードする。
ここか、
Universal USB Installer 1.9.7.4 - ダウンロード
ここから。
Universal USB Installer - Easy as 1 2 3 | USB Pen Drive Linux
適当なことろにダウンロードして解凍する。
Universal USB Installerを使ってUbuntuのISOを1本目のUSBに焼いてライブメディアを作る。
1本目のUSBメモリをFAT32形式でフォーマットしておきます。
そうしたら、ダウンロードしたUniversal USB Installerを起動してOSとISOとメディア(フォーマットした1本目のUSBメモリ)を選択して書き込み開始する。
1本目のUSBを使ってブートして2本目のUSBにUbuntuをインストールする。
書き込みが終わったら、パソコンをシャットダウンしてBIOSからライブメディアをブートします。
2本目のUSBを挿します。必要ならGPartedを起動、パーティションを分けます。
パーティションの作り方は、右クリックからアンマウントして削除して新規で作ります。
Winで読めるように共通の領域を作るならFAT32形式のパーティションを左詰めで作ります。
残りはUbuntu用にext4でフォーマット。
必要ならスワップ領域も作る。(メモリが足りなくなった時に仮想メモリとして作用する領域。通常PCの搭載メモリと同量かその倍のサイズにする。)
パーティションの分割が終わったらUbuntuのインストーラを起動します。
インストールの種類でそれ以外を選択。
パーティションの初期化にチェック。マウントポイントは『/』で。
ブートローダをインストールするデバイスで、USBメモリを選びます。
あとはインストーラの指示にしたがってインストール。
WindowsにUbuntuの仮想環境を導入する。
Windows10にUbuntu14.04の仮想環境を導入します。
取りあえず流れだけ。と言いつつ、だいたいこれがほとんどです。
環境
- Windows10
- Ubuntu14.04
参考URL
- VirtualBox 最大パフォーマンスでUbuntu環境を構築する | ほりべあぶろぐ
- 仮想化ソフトウェアの比較
- WindowsのVirtualBoxにUbuntu 13.04をインストールしてみた -VirtualBoxの使い方
- VirtualBox:仮想マシンの作成で64bit OSを選択可能にする方法
- VirtualBoxの仮想マシンの作成で32bitしか表示されない
- Ubuntuでホームディレクトリの中身を英語にする - Qiita
- Ubuntu のデスクトップ環境のフォルダ名を日本語から英語にする - Qiita
- 【Ubuntu 14.04】ディレクトリを英語名に変更する
- VirtualBox 共有フォルダー設定 - ホストとゲスト間でフォルダーを共有 - PC設定のカルマ
- [VirtualBox] VirtualBoxで仮想マシンを別環境や別フォルダに移動する方法 | Dr.Clover's Computer Clinic
- VirtualBoxを全画面(フルスクリーン)で表示する方法 - VirtualBoxの使い方
- VirtualBox にインストールした Ubuntu の画面サイズ(解像度)を640×480以外に変更する方法 | mogi2fruitsどっとねっと
- 雑記 VirtualBoxでの USBメモリ認識方法 - hoge774-nazeのブログ
- VirtualBoxをインストールしたらVirtualBox Extension Packもインストールしよう | Windows on Mac BootCampを使って MacでWindowsを動かそう
USB切替機を自作する。
メインのPCに加えてラズベリーパイをいじるようになりました。
まあラズベリーパイならメインのPCから遠隔操作すればいいのですが、そこに最近はSurfaceが追加されてキーボードマウスがもう一セット必要になってしまいました。
予備キーボードマウスはあるっちゃあるんですが、置くスペースもないし、何よりいちいち使い分けるのが非常に面倒です。
そこでUSB機器を複数のPCで切り替えられるUSB切替機を探してみたんですが、なぜかすごく高い。4つ切り替える切替機で1万とかします。(今はなんかすごく安くなっていますね。探し方が悪かったのかも。)
ということで、そんな高いもん買うならと思い、作ってみました。
作り終わってから記事にしようと思いついたので画像は完成したものしかありません。完成したものしかないといいつつ画像は今度アップロードします。
材料
- ケース
- 配線
- オス―オスUSB端子 3つ
- メス―メスUSB端子
- ユニバーサル基盤
- ロータリースイッチ
作り方
原理は簡単。単純にUSBの4端子をロータリースイッチで切り替えるだけです。
回路図は以下の通り。
他の人が自作しているものを見ると、グランドが共通だったり電源が共通だったりしますが、
電位のズレによる電流の逆流等が怖いので、電源もグランドも信号線ごとすべて切替えます。(本当はスイッチングノイズ対策とかしたほうがいいのかも)
そのためロータリースイッチは4回路3接点のものを使います。
ロータリースイッチの回路図は以下の通り。
家には電動ドリルなんてものはないので、ミニリューターとやすりとデザインナイフで頑張ってケースに穴をあけます。
メス―メスUSB端子とオス―オスUSB端子を無理やり分解して端子の部分に無理やり半田します。
伸ばした配線をロータリースイッチに半田してケースに収めて完成です。
今のところ問題なく使えてますが、やっぱり既製品を買ったほうが良いでしょう。
既製品は何より、PCやUSB機器を壊す心配がないのがいいですね。
今なら4分岐を2000円くらいで買えるようです。というか結局買っちゃいました。↓
Amazon CAPTCHA
OpenCVを使ったカメラの歪み補正。
OpenCV3.1を使ってカメラの歪み補正を行う。
取りあえず流れだけ。
流れ
- チェスボードの画像を用意する。
- チェスボードのコーナーを検出する。
- 検出したコーナーの情報の精度を上げる。(サブピクセル精度。)
- チェスボードのコーナーの世界座標系を指定する。(要はチェスボードのマス目の現実での大きさを指定する。)
- これらの情報からカメラの内部パラメータを取得する。
- 取得したパラメータを使ってキャリブレーション。
主な参考URLまとめ
- OpenCVとVisual C++による画像処理と認識(17)----- 三次元再構成の準備として、カメラキャリブレーションを行う -----
- OpenCVで魚眼カメラのキャリブレーション - takminの書きっぱなし備忘録
- カメラ校正 - Qiita
- 機械の目が見たセカイ -コンピュータビジョンがつくるミライ (5) 意外と知らないカメラキャリブレーション | マイナビニュース
- OpenCV2系のAPIを使って歪み補正を行う - Qiita
- レンズ歪みの補正 - TB-code
- カメラキャリブレーションと3次元再構成 — opencv 2.2 documentation
【その他参考URL】
- fisheye::undistortImage() doesn't work. What wrong with my code. - OpenCV Q&A Forum
- opencv.jp - OpenCV: カメラキャリブレーション(Camera Calibration)サンプルコード -
- OpenCV: Fisheye camera model
- Camera Calibration and 3D Reconstruction — OpenCV 2.4.13.2 documentation
- JugglerYou日記 :: ステレオカメラの歪み補正&平行化
- 【OpenCV】広角レンズの歪み補正 - SOARISTO工房blog
- AR.Droneのカメラキャリブレーション - Puku's Laboratory
- OpenCVで遊ぼう!: OpenCVのカメラキャリブレーションとARもどき
- OpenCVのundistort(レンズ歪み補正)で端っこが欠けてしまうのをなんとかする - Qiita
- fisheye::undistortImage() doesn't work. What wrong with my code. - OpenCV Q&A Forum
OpenCV3.2とcontribをWin10に導入してビルドしてサンプル実行。
Win10にOpenCV3.2を導入します。基本的に導入方法はどのバージョンでも同じだと思います。
流れ
- Visual Studio Community 2015をインストールする。
- Cmakeをインストールする。
- OpenCV3.2のソースをダウンロードする。
- OpenCV3.2のcontribのソースをダウンロードする。
- Cmakeを使って自分の環境にあったOpenCVのソースを作る。
- Visual Studioを使ってソースをビルドする。
- ビルドしてできたDLLのパスを通して、ヘッダーとライブラリをVisual Studioで指定する。
- サンプルプログラムをビルドする。
Visual Studio Community 2015をインストールする。
Visual Studioの公式サイトからインストーラをダウンロードして、インストールします。
インストールの方法は特に変わったことはありません。インストーラに従ってインストールしてください。
OpenCV3.2のソースをダウンロードする。
OpenCVの公式サイトから3.2のWindow版をダウンロードします。
OpenCVのGitHubからダウンロードしても同じだと思っていたのですが、うまくいかなかったので公式サイトからダウンロードしましょう。
ダウンロードしたら解凍して、適当な場所に置きます。置く場所はどこでもいいです。(多分)
今回はCドライブの直下に置いてフォルダ名をopencv320に変えておきます。
OpenCV3.2のcontribのソースをダウンロードする。
contribのソースはGitHubからダウンロードします。
ここのサイトから
opencv_contrib → release → 3.2.0と飛んで、
Source code (zip)をクリックしてダウンロードします。
ダウンロードしたら解凍して、適当な場所に置きます。置く場所はどこでもいいです。(多分)
今回はCドライブの直下に置いてフォルダ名をopencv_contrib320に変えておきます。
Cmakeを使って自分の環境にあったOpenCVのソースを作る。
Cmakeを解凍したフォルダの中のbinフォルダのcmake-gui.exeを実行します。
そしたら、Where is the source code:の欄にダウンロードしたOpenCVのソースを指定します。
今回は
C:/opencv320/sources
となります。
その下の欄のWhere to build the binaries:には
C:/opencv320/build
と入力します。これはビルドされるバイナリが保存される場所になります。
その後、Configureをクリックします。
コンパイラ環境を聞かれると思うのでVisual Studio 2015を選びます。86と付いているのは32bit版で何もついてないのは64bit版です。
すると、赤くずらずらと出てきます。
これはどういう風にOpenCVをインストールするかといったオプションです。(多分)
まず、Pythonは入っていないのでPython関係のチェックを外します。
NvidiaのGPUも積んでないのでWITH_CUDAのチェックを外します。
それと何故かBUILD_opencv_hdfにチェックが入っているとビルドで失敗するのでチェックを外す。
contribのフォルダを指定します。OPENCV_EXTRA_MODULES_PATHに以下を指定します。
C:/opencv_contrib320/modules
そしたら再びConfigureを押します。
その後Generateをクリックします。
すると、自分の環境にあったソースのソリューションファイルが生成されます。
Visual Studioを使ってソースをビルドする。
CmakeのOpen Projectボタンを押すか、もしくはC:/opencv320/buildの中に生成されているOpenCV.slnをVisual Studioで開きます。
メニューバーのビルドを押してバッチビルドを選択します。そしたら、INSTALLをDebugとReleaseのどちらもチェックしてビルドボタンを押す。
ビルドが終わるのをしばらく待ってエラーなく終了したら成功です。
ビルドしてできたDLLのパスを通して、ヘッダーとライブラリをVisual Studioで指定する。
ビルドして生成されたもので本当に必要なのは3種類です。(多分)
『ヘッダファイル』(拡張子.hpp)と『ライブラリファイル』(拡張子.lib)と『ダイナミックリンクライブラリ』(拡張子.dll)の3つです。
それ以外のファイルはダウンロードしたものを含めて全て削除しても多分大丈夫です。(サンプルプログラムとかサンプルコードは別として)
ヘッダファイルはOpenCVに使われている関数とかの定義が書いてあるファイル。(多分)
ライブラリファイルは関数とかの内容が書かれているファイル。(多分)
ダイナミックリンクライブラリはOpenCVでビルドされたプログラムを実行するときに一緒に実行されるファイル。(多分)
つまり、ビルド時にはヘッダファイルとライブラリファイルが必要で、実行時にはダイナミックリンクライブラリが必要になります。(多分)
この3つのファイルをうまく配置指定してやる必要があります。
ダイナミックリンクライブラリのパスを通す。
ダイナミックリンクライブラリはC:/opencv320/build/install/binの中に有ります。プログラムを実行するのはWindowsなのでこのフォルダをWindowsに教えてやる必要があります。
Windowsのスタートボタンを右クリックしてシステムを選択します。
左の欄のシステムの詳細設定をクリック。詳細設定のタブの一番下の環境変数をクリック。
システムの環境変数の中のPathを選択して編集を押します。
新規を押して、
C:/opencv320/build/install/bin
と入力してOK。パソコンを再起動します。
もう一つの方法として、C:/opencv320/build/install/binの中にある.dllのファイルを
64bitでビルドしたならC:\Windows\System32に
32bitでビルドしたならC:\Windows\SysWOW64に
コピーしても良いようです。
ヘッダファイルの指定
ヘッダファイルはC:/opencv320/build/install/includeの中に有ります。プログラムをビルドするのはVisual StudioなのでこのフォルダをVisual Studioに教えてやる必要があります。
まずVisual Studioで適当なプロジェクトを作成します。
ファイル → 新規作成 → プロジェクト
Visual C++で空のプロジェクトを選んで名前を適当付けます。今回はopencv-testとします。
そしたらソリューションエクスプローラーの欄でopencv-testを右クリックしてプロパティを選択します。
構成ですべての構成を選んでC/C++を選択します。追加のインクルードディレクトリに以下を追加します。
C:/opencv320/build/install/include
ライブラリファイルの指定
ヘッダファイルはC:/opencv320/build/install/libの中に有ります。プログラムをビルドするのはVisual StudioなのでこのフォルダをVisual Studioに教えてやる必要があります。
ライブラリファイルの指定はコード上に書いて指定することができます。
面倒なので全てのライブラリを指定します。
コードの一番上に以下のように記述します。
#ifdef _DEBUG //Debugモードの場合 #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_aruco320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_bgsegm320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_calib3d320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_ccalib320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_core320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_datasets320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_dnn320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_dpm320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_face320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_features2d320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_flann320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_fuzzy320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_highgui320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_imgcodecs320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_imgproc320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_line_descriptor320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_ml320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_objdetect320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_optflow320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_photo320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_plot320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_reg320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_rgbd320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_saliency320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_shape320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_stereo320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_stitching320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_structured_light320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_superres320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_surface_matching320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_text320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_tracking320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_video320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_videoio320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_videostab320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_xfeatures2d320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_ximgproc320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_xobjdetect320d.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_xphoto320d.lib") // opencv_core #else //Releaseモードの場合 #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_aruco320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_bgsegm320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_calib3d320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_ccalib320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_core320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_datasets320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_dnn320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_dpm320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_face320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_features2d320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_flann320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_fuzzy320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_highgui320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_imgcodecs320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_imgproc320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_line_descriptor320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_ml320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_objdetect320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_optflow320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_photo320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_plot320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_reg320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_rgbd320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_saliency320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_shape320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_stereo320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_stitching320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_structured_light320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_superres320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_surface_matching320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_text320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_tracking320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_video320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_videoio320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_videostab320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_xfeatures2d320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_ximgproc320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_xobjdetect320.lib") #pragma comment(lib,"C:\\opencv320\\build\\install\\x86\\vc14\\lib\\opencv_xphoto320.lib") #endif
もしくは、もう一つの方法としてヘッダファイルの時と同じように、プロパティを開きリンカーの追加のライブラリディレクトリに
C:/opencv320/build/install/x86/vc14/lib
を追加します。
次にリンカーの入力の追加の依存ファイルにlibフォルダの中身を追加します。構成のDebugかReleaseかによって追加するファイルを分けてください。
opencv_xxxd.libはDebugに、opencv_xxx.libはReleaseといった感じに追加してください。
OpenCVあれこれ。
OpenCVでよく使う色んな物を適当に追加していく。
- cvtColor()
【参考URL】
【OpenCV】色変換(cvCvtColor)の組合せ 画像処理ソリューション
cvtColor(src_image, dest_image, CV_BGR2GRAY);
src_imageの色空間を変換してdest_imageに出力する。CV_BGR2GRAYならカラーをグレースケールに。RAW画像を使えば『CV_BayerGB2RGB』,『CV_BayerRG2RGB』,『CV_BayerGR2RGB』のどれかでカラー画像にもできる。そのときはベイヤーパターンに注意。
- VideoCapture
- resize()
- rectを使ったトリミング
OpenCVのVideoWriterを使って画像から動画を作る。
連続した画像(パラパラ漫画のうような画像)から一つの動画を作ったのでメモを残しときます。
流れ
- VideoWriterのクラスがあるライブラリをインクルードする。
- 動画ファイルの箱を作る。
- 動画ファイルが正しく開けているか確認する。
- 動画ファイルに画像を追加していく。
VideoWriterクラスについて
コンストラクタで箱となる動画ファイルを作って設定を行います。
VideoWriter::VideoWriter(const string& filename, int fourcc, double fps, Size frameSize, bool isColor=true)
【引数の説明】
引数 | 説明 |
---|---|
filename | 書き出すファイル名。 |
fourcc | コーデックを指定するための関数。(4つの文字を引数に取ります。) |
fps | 動画像のフレームレート。(=1秒あたりのフレーム数) |
frameSize | 動画像の縦横サイズ。 |
isColor | カラーの動画像ファイルとして書き出すかを指定する。 |
fourccは実際にはこう使います。
VideoWriter::fourcc('W', 'M', 'V', '1')
引数となる4つの文字は以下の通り。
コーデック名 | 引数 | 拡張子 |
---|---|---|
MP4S | ('M', 'P', '4', 'S') | .mp4 |
MP4V | ('M', 'P', '4', 'V') | .mp4 |
DIV3 | ('D', 'I', 'V', '3') | .avi |
DIVX | ('D', 'I', 'V', 'X') | .avi |
I420 | ('I', '4', '2', '0') | .avi |
IYUV | ('I', 'Y', 'U', 'V') | .avi |
MJPG | ('M', 'J', 'P', 'G') | .avi |
PIM1 | ('P', 'I', 'M', '1') | .avi |
XVID | ('X', 'V', 'I', 'D') | .avi |
dv25 | ('d', 'v', '2', '5') | .wmv |
dv50 | ('d', 'v', '5', '0') | .wmv |
dvc | ('d', 'v', 'c', ' ') | .wmv |
dvh1 | ('d', 'v', 'h', '1') | .wmv |
dvhd | ('d', 'v', 'h', 'd') | .wmv |
dvsd | ('d', 'v', 's', 'd') | .wmv |
dvsl | ('d', 'v', 's', 'l') | .wmv |
H263 | ('H', '2', '6', '3') | .wmv |
M4S2 | ('M', '4', 'S', '2') | .wmv |
MP43 | ('M', 'P', '4', '3') | .wmv |
MPG1 | ('M', 'P', 'G', '1') | .wmv |
MSS1 | ('M', 'S', 'S', '1') | .wmv |
MSS2 | ('M', 'S', 'S', '2') | .wmv |
WMV1 | ('W', 'M', 'V', '1') | .wmv |
WMV2 | ('W', 'M', 'V', '2') | .wmv |
WMV3 | ('W', 'M', 'V', '3') | .wmv |
WVC1 | ('W', 'V', 'C', '1') | .wmv |
mp4v | ('m', 'p', '4', 'v') | .mov |
サンプルプログラム
下記のサンプルプログラムは『C:\log\』にある『0000000.jpg』『0000001.jpg』『0000002.jpg』...といった画像を一つの動画にして『C:\Users\shibafu\Documents\OutVideo.wmv』というファイルに出力するプログラムです。
#include "opencv2/highgui.hpp" #include "opencv2/Videoio.hpp" #include <opencv2/core.hpp> #include <stdio.h> #include <iostream> using namespace std; using namespace cv; int main(){ //出力する動画ファイルの設定をします。拡張子はWMV1で、毎秒15フレーム、画像縦横サイズは1024*1024。 VideoWriter writer("C:\\Users\\shibafu\\Documents\\OutVideo.wmv", VideoWriter::fourcc('W', 'M', 'V', '1'), 15.0, Size(1024, 1024)); //動画ファイルがちゃんと作れたかの判定。 if (!writer.isOpened()){ return -1; } //動画にする画像の名前を入れる文字配列。 char image_name[100]; //動画にする画像を入れるMat。 Mat image; //『0000000.jpg』から『0001000.jpg』までの画像を動画にしていく。 for (int i = 0; i < 1001; i++){ //画像の名前を更新。 sprintf(image_name, "C:\\log\\%07d.jpg", i); //名前に対応した画像を取り込み。 image = imread(image_name); //画像がなければ処理を飛ばす。 if (image.empty()) { cout << "no image : " << image_name << endl; continue; } //動画ファイルに画像を出力。 writer << image; } return 0; }