Opencv<< cout的操作符错误并写入FileStorage

时间:2014-09-23 08:48:54

标签: c++ opencv matrix

我遇到问题<<运算符为cout工作并在Visual Studio c ++ 2010 express中写入FileStorage对象。我正在使用vs10库,包括*** d.lib文件,并在调试模式下运行我的项目。其他opencv函数(ORB,imshow)似乎可以工作

当我使用<<使用cout打印矩阵的运算符我遇到访问冲突错误。

我遇到的第二个问题是当我尝试将一个矩阵写入FileStorage对象时。我可以编写1个矩阵并从文件中读取它而不会崩溃。然而,当我尝试写2个矩阵时,我在第二次写入时得到“内存位置异常”错误。控制台错误表明没有给出元素名称。

我用于测试的代码:

cv::Mat test(3,3,CV_8UC1);
cv::FileStorage file("fudge.xml", cv::FileStorage::WRITE);  

for(int x=0;x<3;x++){
    for(int y=0;y<3;y++){
        test.at<unsigned char>(x,y) = x+y;
    }
}

std::cout<<test<<std::endl;

file << "rotMat1" << test;
file << "rotMat2" << test;

代码更新

这是我的整个代码

#include "stdafx.h"
#include <opencv2\core\core.hpp>
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])
{
    cv::Mat test(3,3,CV_8UC1);
    cv::Mat test2(3,3,CV_8UC1);

    cv::FileStorage file("fudge.xml", cv::FileStorage::WRITE);  

    for(int x=0;x<3;x++){
        for(int y=0;y<3;y++){
            test.at<unsigned char>(x,y) = x+y;
            test2.at<unsigned char>(2-x,2-y) = x+y;
        }
    }

    std::cout<<test<<std::endl; //error 1

    file << "AAAAA" << test;
    file << "BBBBB" << test2; //error 2

    return 0;
}

两个错误仍然存​​在

更新,我修好了(有点)

我发现了问题,但现在有一个新问题。所以问题是因为我在VS2010和VS2012都有项目。因此,我将vs10 / bin和vs11 / bin添加到路径变量中。事实证明,这会导致使用vs11 / bin的visual studio(可能因为它首先被声明)。删除vs11 / bin后,它在vs2010中工作但是现在vs2012被打破了。因为这不是原始问题的一部分,所以我会将其设置为已回答。

3 个答案:

答案 0 :(得分:1)

问题在于,因为我在visual studio 2010和2012中都有使用opencv的项目,所以我将两个/ dir路径添加到环境路径变量中。这导致视觉工作室总是使用2012 / dir(可能因为这被宣布为第一)。删除2012 / dir后,它运行良好。

答案 1 :(得分:0)

答案 2 :(得分:0)

我认为命名空间不是问题所在。 我能想到的两件事导致了这个问题: -

  • 你发布了你的文件对象吗?
  • 在XML文件中,两个条目都具有相同的字段。我不确定Opencv中的XML文件存储是否支持它。你尝试用不同的Mat对象写两次吗?