2017-03-16 4 views
0

私はthis tutorial

チュートリアルで概説したように、魚眼画像をundistortsマップを作成するためにOpenCVののinitUndistortRectifyMap()機能を使用しようとしていますが、このコード行を持っているのOpenCVのUndistortRectifyMap()内m1typeパラメータは何です:

mapx,mapy = cv2.initUndistortRectifyMap(mtx,dist,None,newcameramtx,(w,h),5) 

しかし、私のスクリプトは、その行に到達したとき、次のエラーがスローされます。

OpenCVのerrrorを:アサーションが失敗した(m1type == CV_16SC2 || m1type == CV_32FC1 || m1type == initUndistortedRectifyMapでCV32FC2)、ファイル /hdd/buildbot/slave_jetson_tx_3/35-04T-L4T-R24/opencv/modules/imgproc/src/undistort.cpp

エラーの発生源があるように思われますdocumentationによれば、 "m1type - CV_32FC1またはCV_16SC2になることができる最初の出力マップのタイプ"である最後の引数の '5'。これらの異なるタイプは何を意味し、どのようにプログラムの正しい価値がわかりますか?

(注:私は()関数cv2.undistortの承知していますが、それは私の目的のために動作しません。)

答えて

1

アサーションm1typeのいずれかでなければならないと述べている:CV_16SC2CV_32FC1またはCV_32FC2を、あなたは5として渡しています。 11

CV_32FC1 - - 5

CV_32FC2 - OpenCVの2のように、これらの定数の積分値は

CV_16SC2としてマッピングされているドキュメントで、あなたがた理由である13

参照してください、著者はCV_32FC1を意味するために5を使用しましたが、それは悪い選択です、CV_32FC1またはmat.type()を使用してマットのタイプを取得する必要があります、そのような数値定数を使用することは避けてください。

0

私の混乱の一部は、「m1type」に関するものでした。これは、OpenCVのMatオブジェクトに格納されている値のタイプを指します。 、
CV_[The number of bits per item][Signed or Unsigned][Type Prefix]C[The channel number]source

は、したがって、例えば、 'CV_16SC2' は16ビット符号付き、2つのチャネル:名の形式は以下の通りです。