我有一段代码使用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安装中,我都有可用的库。
非常感谢您的任何见解。