OpenCV中的Graphcut会产生奇怪的错误
graphcut in opencv generate strange error
我有这个代码:
int main()
{
Mat image0=imread("C:\Working Dir\Tests\TestBlending\image0.jpg");
Mat image1=imread("C:\Working Dir\Tests\TestBlending\image1.jpg");
// our corners are just at (0,0)
cv::Point corner1;
corner1.x = 0;
corner1.y = 0;
cv::Point corner2;
corner2.x = 0;
corner2.y = 0;
std::vector<cv::Point> corners;
corners.push_back(corner1);
corners.push_back(corner2);
std::vector<cv::Mat> masks;
Mat imageMask0;
Mat imageMask1;
masks.push_back(imageMask0);
masks.push_back(imageMask1);
std::vector<cv::Mat> sources;
sources.push_back(image0);
sources.push_back(image1);
cv::detail::GraphCutSeamFinder *seam_finder = new cv::detail::GraphCutSeamFinder();
seam_finder->find(sources, corners, masks);
printf("%lun", masks.size());
for(int i = 0; i < masks.size(); i++)
{
std::cout << "MASK = "<< std::endl << " " << masks.at(i) << std::endl << std::endl;
}
return 0;
}
当我运行此代码时,我收到此错误:
OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3) - 1))*4) & 15) == elemSize1()) in unknown function, file C:slavebuildsWinInstallerMegaPacksrcopencvmodulescoreincludeopencv2/core/mat.hpp, line 537
失败位置的堆栈是:
[Frames below may be incorrect and/or missing, no symbols loaded for KernelBase.dll]
TestApplication.exe!_CxxThrowException(void * pExceptionObject, const _s__ThrowInfo * pThrowInfo) Line 152 C++
TestApplication.exe!cv::error(class cv::Exception const &) Unknown
TestApplication.exe!cv::Mat::at<class cv::Point3_<float> >(int,int) Unknown
TestApplication.exe!cv::detail::GraphCutSeamFinder::Impl::findInPair(unsigned int,unsigned int,class cv::Rect_<int>) Unknown
TestApplication.exe!cv::detail::PairwiseSeamFinder::run(void) Unknown
TestApplication.exe!cv::detail::PairwiseSeamFinder::find(class std::vector<class cv::Mat,class std::allocator<class cv::Mat> > const &,class std::vector<class cv::Point_<int>,class std::allocator<class cv::Point_<int> > > const &,class std::vector<class cv::Mat,class std::allocator<class cv::Mat> > &) Unknown
TestApplication.exe!cv::detail::GraphCutSeamFinder::Impl::find(class std::vector<class cv::Mat,class std::allocator<class cv::Mat> > const &,class std::vector<class cv::Point_<int>,class std::allocator<class cv::Point_<int> > > const &,class std::vector<class cv::Mat,class std::allocator<class cv::Mat> > &) Unknown
TestApplication.exe!cv::detail::GraphCutSeamFinder::find(class std::vector<class cv::Mat,class std::allocator<class cv::Mat> > const &,class std::vector<class cv::Point_<int>,class std::allocator<class cv::Point_<int> > > const &,class std::vector<class cv::Mat,class std::allocator<class cv::Mat> > &) Unknown
TestApplication.exe!main(int argc, char * * argv) Line 58 C++
我正在使用 OpenCV 2.4.6 (C++ 在 Visual Studio 2012 上)
生成此错误的此代码有什么问题?
是否有任何示例代码可以显示如何在混合之前使用 GraphCut 查找两个图像之间的接缝线?
编辑 1
我做了一些挖掘,发现问题出在这一行:
subimg1.at<Point3f>(y + gap, x + gap) = img1.at<Point3f>(y1, x1);
这是在第 1241 行seam_finders.cpp。
问题是图像 1 不是浮点格式,因此 img1.at(y1, x1); 生成错误。
我尝试将图像转换为浮动,这解决了问题,但也清除了图像中的所有数据。
所以我现在的代码是:
Mat image0=imread("C:\Working Dir\Tests\TestBlending\layer0000.jpg");
Mat image1=imread("C:\Working Dir\Tests\TestBlending\layer0001.jpg");
image0.convertTo(image0,CV_32FC3);
image1.convertTo(image1,CV_32FC3);
我可以看到图像已正确加载,但在转换为后它们都是空的(值为零)。
如何解决此问题?
初始化图像遮罩。用:
vector<Mat> masks;
Mat mask0(cropped_scene.size(), CV_8U);
mask0(Rect(0, 0, mask0.cols, mask0.rows)).setTo(255);
Mat mask1(cropped_object.size(), CV_8U);
mask1(Rect(0, 0, mask1.cols, mask1.rows)).setTo(255);
masks.push_back(mask0);
masks.push_back(mask1);
相关文章:
- 删除映射和分割错误中的一个过去结束元素
- C++类错误中的模板专用化
- 模板元编程,简历资格错误中的冲突
- Cpp 错误中的<<运算符
- 功能错误中的表达语法帮助!C/C
- Cython将扩展模块传递到to_py_call_code错误中的python reults
- 在测试网上部署智能合约时合约错误中的未知操作 hi
- C 错误中的pronic号码
- 循环和运行时错误中的C 变量声明
- C++ 分段错误中的命令行参数
- 映射引发错误中的 C++ 自定义对象
- MSVC11 错误中的 x64 位 asm
- C++错误中的复合 [没有匹配调用 'push_back'的成员函数]
- 包括Code::Blocks错误中的多个标头
- c++编译器错误中的简单类继承
- 获取Openssl证书错误中的错误字符串
- <Mat> 函数逻辑错误中的向量传递
- 分配错误中的非 Ivalue
- 链接器错误中的"Symbol from plugin"
- 赋值错误中的非左值