2014-09-23 90 views
1

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

当我使用< <运算符打印与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; 
} 

两个错误仍时有发生

UPDATE,我固定它(种)

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

+0

你可以添加你的发现作为答案?它可以帮助有同样困境的人。 – 2014-09-25 09:24:38

+0

好的,我发布了下面的答案并用绿色检查标记了它。 – user3652562 2014-09-25 11:37:35

回答

1

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

0

我不认为命名空间的问题。 我可以想到导致问题的两件事: -

  • 您是否释放了您的文件对象?
  • 在XML文件中,两个条目都具有相同的字段。我不确定Opencv中是否支持XML文件存储。你是否尝试用不同的Mat对象写两遍?
+0

在写入之前,我没有调用FileStorage的释放功能。当试图存储两个不同的矩阵时,它也会在内存中发生异常。错误的控制台输出还提到没有给出元素名称。所以我也尝试了两个完全不同的矩阵名称。而不是rotMat1和rotMat2我尝试了AAAAA和BBBBB,但这也有助于解决问题。 – user3652562 2014-09-23 12:22:25

+0

我刚刚试过你的代码,它完全适合我,没有变化。 :/ – 2014-09-23 12:32:10

+0

也许我加错了库。我的过程是: 将“opencv \ build \ include”添加到c/C++ - > general->其他include目录中 将“opencv \ build \ x86 \ vc10 \ lib”添加到其他库目录 ,并将其添加到其他依赖项:opencv_core249d.lib,opencv_imgproc249d.lib,opencv_highgui249d.lib,opencv_ml249d.lib,opencv_video249d.lib,opencv_features2d249d.lib,opencv_calib3d249d.lib,opencv_objdetect249d.lib,opencv_contrib249d.lib,opencv_legacy249d.lib,opencv_flann249d.lib – user3652562 2014-09-23 12:46:33