我在使<
当我使用<
我遇到的第二个问题是当我尝试将矩阵写入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都添加到了路径变量中。事实证明,这导致Visual Studio使用vs11 / bin(可能是因为首先声明了它)。删除了vs11 / bin清除后,它在vs2010中可以工作,但现在vs2012已损坏。因为这不是原始问题的一部分,所以将其设置为已回答。

最佳答案

问题是,因为我在Visual Studio 2010和2012中都有使用opencv的项目,所以我将/ dir路径都添加到了环境路径变量中。这导致Visual Studio始终使用2012 / dir(可能是因为它是第一个声明的)。删除2012 / dir后,它工作正常。

关于c++ - Opencv <<运算符(operator)错误,用于cout和写入FileStorage,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25990724/

10-13 09:47