0

私はopenCv 2.4.6を使用しています。

以下は機能しません。

  cv::Mat src = cv::imread(argv[1], 1);

  int x11 = src.rows/3; int y11 = src.cols/3;
  int x12 = src.rows/3; int y12 = src.rows*2/3;
  int x13 = src.cols*2/3; int y13 = src.rows*2/3;

  int x21 = 0; int y21 = 0;
  int x22 = 0; int y22 = src.rows-1;
  int x23 = src.cols-1; int y23 = src.rows-1;

#if 1 // doesn't work
  float src_tri_data[] = {x11, y11, 0, x12, y12, 0, x13, y13, 0};
  cv::Mat src_tri(3, 2, CV_32F, src_tri_data, 3*sizeof(float));

  float dst_tri_data[] = {x21, y21, 0, x22, y22, 0, x23, y23, 0};
  cv::Mat dst_tri(3, 2, CV_32F, dst_tri_data, 3*sizeof(float));
#else // works
  float src_tri_data[] = {x11, y11, x12, y12, x13, y13};
  cv::Mat src_tri(3, 2, CV_32F, src_tri_data, 2*sizeof(float));

  float dst_tri_data[] = {x21, y21, x22, y22, x23, y23};
  cv::Mat dst_tri(3, 2, CV_32F, dst_tri_data, 2*sizeof(float));
#endif

  cv::Mat trans = cv::getAffineTransform(src_tri, dst_tri);

アサーションで失敗します:

OpenCV エラー: アサーションが失敗しました (src.checkVector(2, CV_32F) == 3 && dst.checkVector(2, CV_32F) == 3) in unknown function, file C:\slave\builds\WinInstallerMegaPack\src\opencv\modules\ imgproc\src\imgwarp.cpp、3612行目

ただし、行列を連続的にすると機能します。理由はありますか?

4

1 に答える 1

0

アサーションは、インデックス 2 の行のサイズに 3 つの要素が含まれているが、行列には​​行ごとに 2 つの要素が含まれていることを確認します。
行列のサイズが正しくありません。行列の構成を変更してください:

cv::Mat src_tri(3,
                3,               // <=== 3 instead of 2
                CV_32F,
                src_tri_data,
                3*sizeof(float));
于 2013-09-30T14:58:59.610 に答える