teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

結果画像わすれてた

2021/08/23 01:30

投稿

fana
fana

スコア12234

answer CHANGED
@@ -48,4 +48,7 @@
48
48
  cv::waitKey();
49
49
  return 0;
50
50
  }
51
- ```
51
+ ```
52
+
53
+ 結果:
54
+ ![イメージ説明](3d98561962af237f09b108cdc21b2d29.png)

2

追記

2021/08/23 01:30

投稿

fana
fana

スコア12234

answer CHANGED
@@ -8,4 +8,44 @@
8
8
  →像が回転する要因になっていないか?
9
9
  * objPts の値は実行時のコマンドライン引数由来であるようですが,一体どんな値を与えているのですか?
10
10
  →コマンドライン引数では「何を」与える仕様としているのですか?
11
- コマンドライン引数の使われ方を見るとちょっと謎です(コーナーの点の個数として使われているが,objPtsの座標値にも用いられている.これは正しいの?)
11
+ コマンドライン引数の使われ方を見るとちょっと謎です(コーナーの点の個数として使われているが,objPtsの座標値にも用いられている.これは正しいの?)
12
+
13
+ ---
14
+
15
+ 参考までに,最も単純なコードを示す.
16
+
17
+ * 入力画像はサイズがでかかったので適当に縮小した
18
+ * チェスボードパターンの四隅座標は,当該縮小した画像上で手作業(目視)で求めたものをハードコーディングしてある
19
+ * warpPerspective で WARP_INVERSE_MAP を使ってない
20
+
21
+ ```C++
22
+ int main()
23
+ {
24
+ //※"Board.png"は質問に貼られていた画像を縦横半分に縮小したものを使用した
25
+ cv::Mat SrcImg = cv::imread( "Board.png" );
26
+ if( SrcImg.empty() )return 0;
27
+
28
+ //SrcImg 上のチェスボードパターンの四隅の座標
29
+ cv::Point2f ImgPts[4] = {
30
+ { 218, 267 }, { 385, 267 }, { 196, 375 }, { 406, 373 }
31
+ };
32
+
33
+ //↑の4点の変換結果目標座標.
34
+ //320*240サイズの結果画像の四隅から少し(10[pixel])だけ内側.
35
+ cv::Mat ResultImg = cv::Mat::zeros( 240, 320, CV_8UC3 );
36
+ cv::Point2f ObjPts[4] = {
37
+ { 10,10 }, { 310, 10, }, { 10, 230 }, { 310, 230 }
38
+ };
39
+
40
+ cv::Mat H = cv::getPerspectiveTransform( ImgPts, ObjPts );
41
+ cv::warpPerspective(
42
+ SrcImg, ResultImg,
43
+ H, ResultImg.size(),
44
+ cv::INTER_LINEAR, cv::BORDER_CONSTANT,
45
+ cv::Scalar::all(0)
46
+ );
47
+ cv::imshow( "Result", ResultImg );
48
+ cv::waitKey();
49
+ return 0;
50
+ }
51
+ ```

1

訂正

2021/08/23 01:29

投稿

fana
fana

スコア12234

answer CHANGED
@@ -2,7 +2,8 @@
2
2
 
3
3
  これで何を求めているのかを把握していますか?
4
4
 
5
- * 引数の順序はこれで正しいですか?
5
+ * ~~引数の順序はこれで正しいですか?~~
6
+ (→後段で WARP_INVERSE_MAP を使っているから,これは正しい模様)
6
7
  * objPts と imgPts の4点の対応関係は正しいですか?
7
8
  →像が回転する要因になっていないか?
8
9
  * objPts の値は実行時のコマンドライン引数由来であるようですが,一体どんな値を与えているのですか?