6

ウェブカメラのスナップショットが歪んでいます。jpegファイルとして、固有の行列と歪み係数:-

matrix intrisic matrix
      (1137.0919189453125,0.0,383.99273681640625)
      (0.0,264.17974853515625,312.74951171875)
      (0.0,0.0,1.0)

matrix distortion :-
    (-0.26913660764694214)
    (0.22259517014026642)
    (-0.0928017795085907)
    (0.26249778270721436)

これらの歪み係数を使用して歪みのない画像を取得するために、これらの歪み係数をCvMatにロードする方法がわかりません。また、javacvのみを使用してこれを実行したいと思います。

編集:-また、私は機能を知っています

IplImage mapx=cvCreateImage(cvSize(src_img),IPL_DEPTH_32F,1);
IplImage mapy=cvCreateImage(cvSize(src_img),IPL_DEPTH_32F,1);

cvInitUndistortMap(CvMat intrinsic,CvMat distortion, IplImage mapx, IplImage mapy); 
cvRemap(IplImage tm,IplImage src,IplImage mapx,IplImage mapy,CV_INTER_LINEAR|CV_WARP_FILL_OUTLIERS,cvScalarAll(0));

しかし、固有の行列と歪み係数のそれぞれのcvMatsを初期化する方法がわかりません。

4

1 に答える 1

3

なぜ使用しないのcv::undistortですか?

行列をパラメーターとして受け取ります。

void undistort(const Mat& src, Mat& dst, const Mat& cameraMatrix, const Mat& distCoeffs, const Mat& newCameraMatrix=Mat())

srcマトリックスはあなたのイメージです。

dst行列は歪みのない画像です。

cameraMatrix、固有のマトリックスです。

distCoeffsマトリックスは歪みマトリックスです。

ドキュメントから引用するには:

修正された画像に表示されるソース画像の特定のサブセットは、によって調整できますnewCameraMatrix。要件に応じて、GetOptimalNewCameraMatrix を使用して適切な を計算できnewCameraMatrixます。


わかった。私はあなたのコメントへの答えを見つけました....と思います。

public static native void cvUndistortPoints(CvMat src, CvMat dst, CvMat camera_matrix, CvMat dist_coeffs, CvMat R/*=null*/, CvMat P/*=null*/); これはhttp://www.java2s.com/Open-Source/Android/UnTagged/educationalrobots/name/audet/samuel/javacv/jna/cv.java.htmにあります。

これは実際にはimgprocにあります。

最後の 2 つのパラメーターを作成するだけnullです。


2 番目の部分 - CvMat の初期化 - は見た目よりも難しいです。エレガントにやりたい場合はポインターをいじる必要があり、JNA ポインターの使い方を忘れてしまいます :)

したがって、別の解決策は次のとおりです。このコンストラクターを使用しますpublic static CvMat create(int rows, int cols, int type);

したがって、マトリックスの場合、3 つの行と 3 つの列があります。

あなたのタイプは cxcore.java のタイプの 1 つで、おそらくCV_64FC1シングル チャネルdoubleタイプです。それ以外の場合、floatsを使用している場合はCV_32FC1.

次に、以下を使用して値を 1 つずつ設定 opencv_core.cvSet2D(matrix, i, j, value);iますj

他に質問は?

チェリオ!

于 2012-06-19T10:02:54.080 に答える