OpenCV InputArray / OutputArray

时间:2012-04-30 01:05:18

标签: opencv

我刚刚编译了OpenCV 2.3的最新版本。他们决定将所有Matrix输入/输出更改为InputArray / OutputArray会让一切变得混乱。在OpenCV 2.2下运行良好的同一段代码现在毫无价值。

我会接受两种解决方案:

  1. 向我展示我可以在哪里下载OpenCV 2.2 for Linux,包含所有模块,重要的是不要缺少拼接(我试图找到合适的拼接,但拼接总是丢失!)。

    < / LI>
  2. 帮我解决下面我要描述的内容。

  3. OpenCV 2.4,即使仍处于测试阶段,已修复此问题,我应该转而使用此版本!

  4. 我有这条例外消息:

    OpenCV Error: Assertion failed (k == STD_VECTOR_MAT) in getMat, file /home/widgg/opencv/trunk/modules/core/src/matrix.cpp, line 928
    terminate called after throwing an instance of 'cv::Exception'
      what():  /home/widgg/opencv/trunk/modules/core/src/matrix.cpp:928: error: (-215) k == STD_VECTOR_MAT in function getMat
    

    在gdb中,这是堆栈:

    #0  0x00007ffff5df3445 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
    #1  0x00007ffff5df6bab in __GI_abort () at abort.c:91
    #2  0x00007ffff674169d in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
    #3  0x00007ffff673f846 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
    #4  0x00007ffff673f873 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
    #5  0x00007ffff673f96e in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
    #6  0x00007ffff77fca51 in cv::error(cv::Exception const&) () from /usr/local/lib/libopencv_core.so.2.3
    #7  0x00007ffff791306d in cv::_InputArray::getMat(int) const () from /usr/local/lib/libopencv_core.so.2.3
    #8  0x00007ffff796064c in cv::perspectiveTransform(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&) () from /usr/local/lib/libopencv_core.so.2.3
    

    最后,当我调用cv :: perspectiveTransform:

    时,这是我的代码
    std::vector<cv::Point2f> corners(4);
    
    cv::Mat cur_image = imread("my_image.jpg");
    
    std::vector<cv::Point2f> img_corners(4);
    
    img_corners[0] = cv::Point2f(0, 0);
    
    img_corners[1] = cv::Point2f(cur_image.cols, 0);
    
    img_corners[2] = cv::Point2f(cur_image.cols, cur_image.rows);
    
    img_corners[3] = cv::Point2f(0, cur_image.rows);
    
    cur_image.release();
    
    cv::perspectiveTransform(img_corners, corners, m_transf);
    

    并且cv :: Mat m_transf =(Mat_&lt; double&gt;(3,3)&lt;&lt;&lt; 1,0,0,0,1,0,0,0,1);,这是它的值它是第一次使用,它在那个地方崩溃了!

    我对cv :: FindHomography有类似的问题。问题是代码昨天正常执行,现在,这个InputArray / OuputArray事情搞砸了。

    这很烦人,请帮忙!

    此外,我在此处发现此报告:OpenCV 2.2 Vs. 2.3并且这不是一个好兆头!应该有一个解决方法!

1 个答案:

答案 0 :(得分:7)

您似乎安装了两个版本的OpenCV,并且链接器尝试使用不同的版本进行链接,而不是用于编译代码的版本。

最简单的方法是删除所有其他OpenCV版本,然后可能错误的库路径将更明确(somelib.so缺失)

或者,检查所有设置PATH,链接器标记和包含文件夹,以确保通过include / complile / link步骤使用相同的版本