我遇到问题<<运算符为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被打破了。因为这不是原始问题的一部分,所以我会将其设置为已回答。
答案 0 :(得分:1)
问题在于,因为我在visual studio 2010和2012中都有使用opencv的项目,所以我将两个/ dir路径添加到环境路径变量中。这导致视觉工作室总是使用2012 / dir(可能因为这被宣布为第一)。删除2012 / dir后,它运行良好。
答案 1 :(得分:0)
您需要添加using namespace cv;
答案 2 :(得分:0)
我认为命名空间不是问题所在。 我能想到的两件事导致了这个问题: -