OpenCVで超解像度画像を作成する
OpenCVのSuperResolutionクラス
OpenCVの2.4.5あたりからSuperResolutionクラスという超解像度処理を行うモジュールが追加されたので,それを使う.
現在Nugetでインストール可能なOpenCVのバージョンは2.4.7なのでSuperResolutionクラスが使用可能である.プロジェクトの右クリックメニューから「Nugetパッケージの管理」をクリックし,出てきたダイアログで「OpenCV」を検索しインストールする.
ソースコード
以下が,超解像度処理を行うプログラムのソース.アルゴリズムとかパラメータの詳細はここを参照.
#include <opencv2/opencv.hpp> #include <opencv2/superres/superres.hpp> void main() { using namespace cv; using namespace cv::superres; // 超解像度処理用クラスの生成 Ptr<SuperResolution> superResolution = createSuperResolution_BTVL1(); // 入力ソースを動画ファイルに設定する superResolution->setInput(createFrameSource_Video("douga.mp4")); // 超解像処理のパラメータ設定(デフォルトのままだとものすごく時間がかかる) superResolution->set("scale", 2); superResolution->set("temporalAreaRadius", 1); superResolution->set("iterations", 2); while (waitKey(1) == -1) { // 高解像度化された画像を取得して表示する Mat frame; superResolution->nextFrame(frame); imshow("Super Resolution", frame); } }
だいぶ重い処理らしく,リアルタイムとはいかない.入力画像のサイズもかなり小さめでないとフリーズしてるのかと思うくらい時間がかかるので注意.