3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

cv::projectPointsの入出力のshapeについてのメモ

Posted at

OpenCVにcv::projectPointsという関数があるのですが、入出力の配列がいろいろshapeを取り全く分からないので調査した個人的なメモ。OpenCVのいろいろな関数がこんな感じな気がします。

入力

objectPoints – 3次元物体上の点群座標の入力配列.これは,3xN または Nx3 のシングルチャンネル配列,あるいは 1xN または Nx1 の3チャンネル配列 (あるいは vector ) です.ここで N はビューの点の個数です.

出力

imagePoints – 出力される,画像上の点の 2xN または Nx2 の1チャンネル配列,あるいは 1xN または Nx1 の2チャンネル配列. (あるいは vector . )

以下opencv-pythonについて調べましたので、他のライブラリでは仕様が異なるかもしれません。

objectPoints(入力)のshape imagePoints(出力)のshape
(3, N, 1) (N, 1, 2)
(N, 3, 1) (N, 1, 2)
(N, 1, 3) (N, 1, 2)
(1, N, 3) (N, 1, 2)

結果、いずれの場合も(N, 1, 2)で出てくるようです。
そうなると、(2, N, 1), (N, 2, 1), (1, N, 2)というパターンはどういうときに出てくるのか気になりますがコードを読みに行く気力がないです。(opencv-pythonの場合にはreshapeして(N,1,2)に揃えているという事なのかもしれません)

また、(3,3,1)はどるなるのかというと、(N,3,1)のパターンとして処理されるようです。そうすると、N=3の時に意味が変わってしまう(3,N,1)という入力を何故用意したのか謎です。
(1,1,3)が(N,1,3)なのか(1,N,3)なのかも気になる所ですが、こっちは結局的には同じ配列になるのでおいておきます。

個人的なメモとしては、常に
入力: (N,1,3)
出力: (N,1,2)
でやるのが良さそうです。しかし、情報を持っていない2次元目は一体何のためにあるのでしょう。

どういう経緯でこのようなインターフェースが出来上がったのか興味がわきます。(個人的な感想を言うと正直ものすごく使いにくい)

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?