0

すでに何時間も探していますが、問題が見つかりません。

2 つの画像をつなぎ合わせようとすると、次のエラーが発生します。

OopenCV error: assertion failed (y==0 || data && dims >=1 && (unsigned)y < (unsigned > size.p[0])) in unkown function...

これはコードです (pano.jpg は、同じアルゴリズムが機能した場合、アルゴリズムの前回の実行で既に結合されていました...):

cv::Mat img1 = imread("input2.jpg");
cv::Mat img2 = imread("pano.jpg");

std::vector<cv::Mat> vectest;
vectest.push_back(img2);
vectest.push_back(img1);
cv::Mat result;
cv::Stitcher stitcher = cv::Stitcher::createDefault( false );
stitcher.setPanoConfidenceThresh(0.01);
detail::BestOf2NearestMatcher *matcher = new detail::BestOf2NearestMatcher(false, 0.001/*=match_conf*/);
detail::SurfFeaturesFinder *featureFinder = new detail::SurfFeaturesFinder(100);
stitcher.setFeaturesMatcher(matcher);
stitcher.setFeaturesFinder(featureFinder);
cv::Stitcher::Status status = stitcher.stitch( vectest, result );

ここで画像を見つけることができます:

編集:opencv 2.4.2を自分でコンパイルしましたが、それでも同じ問題が発生します...

システムは、stitcher.cpp ファイルの次の行でクラッシュします。

blender_->feed(img_warped_s, mask_warped, corners[img_idx]);

このフィード関数では、次の行でクラッシュしました。

int y_ = y - y_tl;
            const Point3_<short>* src_row = src_pyr_laplace[i].ptr<Point3_<short> >(y_);
            Point3_<short>* dst_row = dst_pyr_laplace_[i].ptr<Point3_<short> >(y);

最後に、mat.hpp のこのアサーション:

template<typename _Tp> inline _Tp* Mat::ptr(int y)
{
    CV_DbgAssert( y == 0 || (data && dims >= 1 && (unsigned)y < (unsigned)size.p[0]) );
    return (_Tp*)(data + step.p[0]*y);
}

ここの何人かの人々にとってすべてがうまくいくのは奇妙です...

4

1 に答える 1

0

現在、画像をステッチしていますが、ステッチの高レベル機能を使用せずに、すべてのステップを opencv2.4.2 でエンコードしています。私の知る限り、 first SurfFeaturesFinder、 secondについて試してみることができますBestOf2NearestMatcher。がんばってください!

于 2012-12-28T08:00:57.927 に答える