0

画像から四隅を抽出しましたが、

std::vector<cv::Point2f> ecken;
ecken.push_back(corners[0]);
ecken.push_back(corners[size.height-1]);
ecken.push_back(corners[size.area()-size.height-1]);
ecken.push_back(corners[size.area()-1]);

それらは 2 番目の画像にワープされます。

quad_pts.push_back(cv::Point2f(0, 0));
            quad_pts.push_back(cv::Point2f(quad.cols, 0));
            quad_pts.push_back(cv::Point2f(quad.cols, quad.rows));
            quad_pts.push_back(cv::Point2f(0, quad.rows));

        // Get transformation matrix
            cv::Mat transmtx = cv::getPerspectiveTransform(ecken, quad_pts);
cv::warpPerspective(src, quad, transmtx, quad.size(),1);

クワッドで得た結果から元の画像に戻りたいのですが、これらは私が試したことです:

cv::Mat trans  = cv::getPerspectiveTransform(quad_pts,ecken );
        cv::perspectiveTransform(quad,test,trans); /// I'm not sure that this correct and the program crashes here

コンソールのエラーメッセージは次のとおりです。

OpenCV Error: Assertion failed (scn + 1 == m.cols && (depth == CV_32F || depth =
= CV_64F)) in unknown function, file ..\..\..\opencv\modules\core\src\matmul.cpp
, line 1926

うまくいきませんでした!! 何か案が ??

4

1 に答える 1

0

2 つの Mat オブジェクトの深さが異なります。両方が同じ画像タイプを持つ Mat.depth() を出力して確認します。そのうちの 1 つがグレースケールで、もう 1 つの色である可能性があります。

于 2013-07-24T13:24:38.047 に答える