8569
iPhoneのカメラを使って写真を撮った時に、斜めに傾いてしまった写真を正確な位置に戻したいです。

iPhoneの連写アプリなどをつかって何枚か写真を撮った時、写真1のようにまっすぐ撮れた写真と写真2のように少し傾いてしまった写真があったとします。傾いてしまった写真2をまっすぐにするために、写真1を基準にし何かしらのアルゴリズム(★1)を使って、写真2を補正したいと考えています。OpenCVにおいて、この問題を解決できるアルゴリズムは存在するでしょうか？

![写真1と写真2](https://i.stack.imgur.com/ttuLd.png)  
![写真2の補正](https://i.stack.imgur.com/UvHM7.png)
CC BY-SA 3.0
2015-03-30T10:13:52.027
8561
2015-03-30T12:00:20.007
2020-06-17T08:14:45.997
-1
7699
question
objective-c c++ opencv
OpenCVを使って、傾いてしまった写真を正確な位置に戻したい
こちらの記事が参考になるのではないでしょうか。  
[Opencvを使ってパノラマ写真を作る](http://goya813.hatenablog.com/entry/2014/11/30/180002)

この記事のソースコードでは、以下の様な変換を行っています。

  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(完成)になると思われます。
CC BY-SA 3.0
2015-03-30T12:00:20.007
8569
2015-03-30T12:00:20.007
9044
8561
answer