【问题标题】:How to verify if an unsigned char buffer is image or xml?如何验证无符号字符缓冲区是图像还是 xml?
【发布时间】:2014-09-30 08:47:12
【问题描述】:

我从库中的函数中获取缓冲区。它应该是一个图像缓冲区。我使用 OpenCV 的函数 cv::imdecode(...) 将其转换为 cv::Mat。有时图像在我得到缓冲区之前就被删除了,所以在那种情况下,我预计缓冲区是空的,但我只是发现它包含一个.xml,其中包含某种找不到图像的消息。那么:有没有办法验证缓冲区是否包含.xml 而不是.jpg?或者如何验证?


编辑:

根据我想搜索缓冲区是否以 "<?xml" 开头的评论。

imgOut = cv::imdecode(imgBuf, CV_LOAD_IMAGE_COLOR);
if (imgOut.empty())
{
    std::string xmlStart = "<?xml";
    std::string bufStart(imgBuf.begin(), imgBuf.begin() + 5);
    if (bufStart == xmlStart)
    {
        throw ImageNotAvailableException()
    }
    throw ImageDecodeException(bucketNameIn, objectNameIn);
}

如果解码失败,cv::imdecode 将返回一个空的cv::Mat。这样做可以吗(imgBuf 是std::vector&lt; uchar &gt;)?

【问题讨论】:

  • 如果它是格式良好的 xml,那么它应该符合规范:w3.org/TR/xml/#sec-well-formed 也相关:stackoverflow.com/questions/891223/better-way-to-detect-xml 因此您可以尝试将其解析为 xml,如果失败则尝试查看对于 jpg 标题:en.wikipedia.org/wiki/JPEG#Syntax_and_structure
  • @EdChum 我已经编辑了问题,你能帮忙吗?
  • 除非您仍在寻找包含 inside xml 的图像,否则何必费心呢?如果imdecode不能解析,不管是xml、pdf还是任意垃圾。
  • 您似乎想区分丢失的图像和损坏的图像;这是目标吗?
  • @DavidK 不是。如果图像被删除,我想做更多的事情。因为.xml的情况(deleted image的情况)并不常见,所以我把throw ImageNotAvailableException();放在imgOut.empty()的情况下。

标签: c++ opencv


【解决方案1】:

也许您可以检查 jpeg 标头。

根据本文,jpeg heder 以 (FFD8) 开头 http://www.fastgraph.com/help/jpeg_header_format.html

【讨论】:

  • 是的,但我认为 OpenCV 正在这样做;我的问题是如何验证缓冲区是否包含 .xml?
  • 我已经通过检查是否有xml文件头来解决它
猜你喜欢
  • 2010-10-13
  • 2019-09-26
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
  • 2015-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多