質問: iPhoneのカメラを使って写真を撮った時に、斜めに傾いてしまった写真を正確な位置に戻したいです。 iPhoneの連写アプリなどをつかって何枚か写真を撮った時、写真1のようにまっすぐ撮れた写真と写真2のように少し傾いてしまった写真があったとします。傾いてしまった写真2をまっすぐにするために、写真1を基準にし何かしらのアルゴリズム(★1)を使って、写真2を補正したいと考えています。OpenCVにおいて、この問題を解決できるアルゴリズムは存在するでしょうか? !写真1と写真2 !写真2の補正
回答: こちらの記事が参考になるのではないでしょうか。 Opencvを使ってパノラマ写真を作る この記事のソースコードでは、以下の様な変換を行っています。 1. 2枚の写真のSIFT特徴量を抽出し、 2. 特徴量のマッチングを行い 3. 画像間のホモグラフィ行列を求め 4. 写真2を写真1平面に透視変換した画像(写真3とする)を作成 5. 写真3に写真1を貼り付ける 上記のステップうち、5.のステップを端折れば良いかと。 記事に掲載されているソースコードの最後の部分を以下のように改変します。 ``` Mat homo = cv::findHomography(points1, points2, CV_RANSAC); cv::warpPerspective(src[0], result, homo, Size(src[0].cols, src[0].rows)); imshow("result img", result); waitKey(0); ``` この`result`が求めるべき写真2(完成)になると思われます。