我已经找了几个小时,但我找不到问题。
当我想要将两个图像拼接在一起时,我收到以下错误:
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]);
在此Feed功能中,它在此行崩溃:
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);
}
奇怪,这里的一切人都能正常工作......
答案 0 :(得分:0)
我现在缝合图像,但不使用高级功能,而是用opencv2.4.2对每一步进行编码。据我所知,你可以试试第一个SurfFeaturesFinder
,第二个BestOf2NearestMatcher
。试一试,祝你好运!