OpenCV加载/保存直方图数据。

4
有没有办法将OpenCv图像的直方图存储到磁盘上,这样就可以直接加载而不必强制重新加载图像并从中计算直方图?谢谢。
1个回答

11
假设您正在处理单通道(灰度)图像,直方图可以由一个单通道行矩阵表示,其长度等于直方图中的bin数。 然后,您可以轻松地将直方图从/保存到文本文件。 如果您要使用C++ OpenCV API,则还提供了FileStorage结构。请参阅此文档。 以下是一个简单的示例:
// save file
cv::Mat my_histogram;
cv::FileStorage fs("my_histogram_file.yml", cv::FileStorage::WRITE);
if (!fs.isOpened()) {std::cout << "unable to open file storage!" << std::endl; return;}
fs << "my_histogram" << my_histogram;
fs.release();

// load file
cv::Mat my_histogram;
cv::FileStorage fs("my_histogram_file.yml", cv::FileStorage::READ);
if (!fs.isOpened()) {std::cout << "unable to open file storage!" << std::endl; return;}
fs >> "my_histogram" >> my_histogram;
fs.release();

好的,谢谢!我需要将数据转换为cvHistogram以便进行比较。我猜调用cv::createHist()并传递已加载的cv::Mat会起作用,对吗? - pparescasellas
double compareHist(InputArray H1, InputArray H2, int method) -- InputArray 可以是你加载的 cv::Mat。 - Eric
IsOpen() 已被弃用,请使用 if( !fs.isOpened() ){ 代替。 - TimZaman
当我尝试使用 fs >> "my_histogram" >> my_histogram; 读取时出现错误,所以我不得不改成 fs["my_histogram"] >> my_histogram;。参考:http://docs.opencv.org/modules/core/doc/xml_yaml_persistence.html。 - rdasxy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接