从没有临时变量的cv :: FileNode读取cv :: Mat时编译错误

时间:2013-11-20 21:52:54

标签: c++ opencv g++

我有一段代码使用OpenCV FileStorage API将一行cv::Mat保存到文件中。我试图将这个矩阵读到一行而不使用指向行本身的临时变量。执行此任务的代码如下:

#include <opencv2/highgui/highgui.hpp>

using namespace cv;

int main(int argc, char **argv) {
    Mat src = imread(argv[1], -1);

    FileStorage fs("test.yml", FileStorage::WRITE);
    fs << "imgs" << "[" << "{" << "img" << src.row(500) << "}" << "]";
    fs.release();

    FileStorage fs2("test.yml", FileStorage::READ);
    Mat src2(src.size(), src.type(), Scalar(0));
    FileNode imgsNode = fs2["imgs"];
    for (FileNodeIterator it = imgsNode.begin(); it != imgsNode.end(); ++it)
        (*it)["img"] >> src2.row(500);
    fs2.release();

    imwrite("res.pgm", src2);
}

我正在尝试使用以下Makefile编译它:

# Makefile for Test

CXX = g++

CXXFLAGS = -O2 -g -Wall -fmessage-length=0 -std=c++0x
LDFLAGS =

# OpenCV
CXXFLAGS += `pkg-config opencv --cflags`
LDFLAGS += `pkg-config opencv --libs`

SOURCES = $(wildcard *.cpp)
OBJECTS = $(SOURCES:.cpp=.o)

BIN = Test

all: $(BIN)

$(BIN): $(OBJECTS)
    $(CXX) $(OBJECTS) -o $(BIN) $(LDFLAGS)

.cpp.o:
    $(CXX) -c $(CXXFLAGS) $< -o $@

clean:
    rm -rf $(OBJECTS) $(BIN) *~

当我尝试编译时,会抛出以下错误:

Test.cpp:23:31: error: no match for ‘operator>>’ in ‘cv::FileNode::operator[](const char*) const(((const char*)"img")) >> cv::Mat::row(int) const(500)’

此问题源自this other SO question的答案,声称此代码可用。

我的系统是基于x86_64架构的Ubuntu 12.10。我正在使用g ++ 4.7.2作为编译器,而OpenCV 2.4.6.1与我通过PPA安装的ROS Groovy捆绑在一起。

我从我的发行版存储库以及来自PPA的OpenCV 2.4.2尝试了OpenCV 2.3.1但得到了相同的结果。在每个OpenCV安装中,我都有可用的库。

非常感谢您的任何见解。

0 个答案:

没有答案