我正在使用抓取示例代码。它工作得很好。但我的问题是,如何在所需的迭代后保存最终图像。 我应该在示例代码中添加哪些代码行来保存分段图像?
答案 0 :(得分:2)
说“抓取样本代码”有点模棱两可,但我假设你在the OpenCV github repo指的是样本。
您正在寻找的功能是imwrite
。函数签名是
bool imwrite(const string& filename, InputArray img, const vector<int>& params=vector<int>() );
其中filename
是输出文件,img
是要保存的OpenCV结构,params
是标志(它们的含义取决于您的图像格式)重新尝试保存为)。您可以阅读文档以获得更全面的图片here。您还可以在OpenCV here中更全面地了解图像IO功能。
在github示例的上下文中,您可能希望在所有迭代运行后保存最终的分段图像。但是,分段图像存储为GCApplication
类的私有成员,因此您必须对访问它进行一些干扰。你可以通过几种方式解决这个问题(比这更优雅),但快速而肮脏的方法就是添加线条
//fill in whatever filename you want here
std::string filename = "grab_seg.png";
cv::imwrite(filename, res);
到showImage()
方法的末尾(例如,在第130行附近)。这将写出您在每次迭代结束时看到的分段图像。输出图像每次都会覆盖自己,最后你会得到最后的分割。
正如免责声明一样,这未经过测试。这也是在假设您正在使用github样本的情况下编写的,因此请将其与一粒盐一起服用。
编辑:关于你的评论,这里是(轻微)修改的showImage
方法。如果您想将最终的分段图像保存到磁盘
void GCApplication::showImage() const
{
//same as in the github sample...
//...
imshow( *winName, res );
//the only addition to the code. Writes a PNG image out to the current directory
std::string fname = "grabcut_img.png";
imwrite(fname, res);
}