Opencv 如何将包含图像信息的.xml文件转换为jpeg或png

Opencv 如何将包含图像信息的.xml文件转换为jpeg或png,opencv,Opencv,我的任务是为人类行为检测算法准备数据。总而言之,我得到了一些image.xml文件(使用Kinect传感器拍摄的),我希望将其转换为jpeg或png,以便从算法中读取。我想我必须使用OpenCV 我相信这是一个初学者的问题,但我在网上搜索了一下,什么也没找到 <?xml version="1.0"?> <opencv_storage> <depthImg190 type_id="opencv-image"> <width>320</wid

我的任务是为人类行为检测算法准备数据。总而言之,我得到了一些image.xml文件(使用Kinect传感器拍摄的),我希望将其转换为jpeg或png,以便从算法中读取。我想我必须使用OpenCV

我相信这是一个初学者的问题,但我在网上搜索了一下,什么也没找到

<?xml version="1.0"?>
<opencv_storage>
<depthImg190 type_id="opencv-image">
  <width>320</width>
  <height>240</height>
  <origin>top-left</origin>
  <layout>interleaved</layout>
  <dt>w</dt>
  <data>
    0 0 0 0 27120 27384 27120 27120 27384 27120 27120 27120 27120 27384
    27384 27664 27664 27944 27944 27664 27664 27944 27944 27944 28224
    27944 27944 28224 28224 28224 28224 28520 28816 29120 29120 29120
    29120 29120 29120 29120 29432 29744 30072 30072 29744 29744 30072
    30072 30072 30400 30400 30736 30736 31080 31080 31080 31440 31440
    31440 31440 31800 31800 31800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

    0 0 0 0 27120 27120 27120 27120 27384 27384 27384 27384 27384 27384
    27664 27944 27944 27944 27944 27944 27944 27944 27944 27944 28224
    27944 28224 28224 28224 28224 28224 28520 29120 29120 29120 29120
    29120 29120 29120 29432 29432 29744 29744 30072 30072 30072 30072
    30400 30400 30400 30400 30736 30736 31080 31080 31440 31440 31440
    31440 31440 31800 31800 31800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 27120 27120 27120 27120 27664 27384 27384 27384 27120 27384
    27664 27944 27944 27944 27944 27664 27944 27944 27944 27944 28224


320
240
左上角
交错
W
0 0 0 0 27120 27384 27120 27120 27384 27120 27120 27120 27120 27384
27384 27664 27664 27944 27944 27664 27664 27944 27944 27944 28224
27944 27944 28224 28224 28224 28224 28520 28816 29120 29120 29120
29120 29120 29120 29120 29432 29744 30072 30072 29744 29744 30072
30072 30072 30400 30400 30736 30736 31080 31080 31080 31440 31440
31440 31440 31800 31800 31800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 27120 27120 27120 27120 27384 27384 27384 27384 27384 27384
27664 27944 27944 27944 27944 27944 27944 27944 27944 27944 28224
27944 28224 28224 28224 28224 28224 28520 29120 29120 29120 29120
29120 29120 29120 29432 29432 29744 29744 30072 30072 30072 30072
30400 30400 30400 30400 30736 30736 31080 31080 31440 31440 31440
31440 31440 31800 31800 31800 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 27120 27120 27120 27120 27664 27384 27384 27384 27120 27384
27664 27944 27944 27944 27944 27664 27944 27944 27944 27944 28224

这是一个非常难看的黑客攻击,但它允许您将XML文件转换为一个可以使用OpenCV、ImageMagick或Photoshop轻松读取的文件,或者转换为PNGJPEG

#!/bin/bash

xml=$1

# Get width and height of image
w=$(xmlstarlet sel -t -m "//width"  -v . -n "$xml")
h=$(xmlstarlet sel -t -m "//height" -v . -n "$xml")

# Generate PPM header - https://en.wikipedia.org/wiki/Netpbm_format
printf "P2\n$w $h\n65535\n" > image.ppm

# Append ASCII image data
xmlstarlet sel -t -m "//data" -v . -n "$xml"  >> image.ppm
magick image.ppm result.png    # convert to PNG
magick image.ppm result.jpg    # convert to JPEG
您可以将其作为
xml2ppm
保存在主目录中,并使用以下命令使其可执行(仅一次):

您可以使用以下选项运行它:

$HOME/xml2ppm someFile.xml


如果您假设所有图像都是320x240,并使用
awk
从XML中提取像素数据,那么您还可以删除对
xmlstarlet
的依赖,并使其更加丑陋和粗糙:

#!/bin/bash

# Generate PPM header - https://en.wikipedia.org/wiki/Netpbm_format
# and follow with ASCII data from XML file embedded in <data>...</data> tags

xml=$1

awk '
  BEGIN      {print "P2\n320 240\n65535\n"}
  /<data>/   {flag=1; next}
  /<\/data>/ {exit}
  flag
  ' "$xml" > image.ppm
如果您的ImageMagick是v6或更旧版本,请使用
convert
代替
magick


关键字:XML、xmlstarlet、Kinect、OpenCV、OpenCV存储、depthImg190、OpenCV图像

可能重复的您能提供完整文件的链接吗?在行动中。这是我从@marksetchellow下载它们的地方!成功了,非常感谢。因此,文件采用xml格式的原因是它们能够从不同的应用程序中读取?@DimitrisOikonomou抱歉,我不知道为什么会有人选择使用这种晦涩难懂的格式-你必须询问信息发布者。我在文件中看不到任何不能存储在正常PNG或TIFF或PPM文件中的内容-所有这些文件都可以存储16位灰度或颜色数据。请记住接受答案,如果它有效,并且没有更好的结果:-)我是新手。不过,我仍在试图理解.xml中的数字真正代表的是什么。非常感谢!!!:-您可以在第4行和第5行看到宽度和高度。然后,
部分中的数字只是0..65535(即16位)尺度上像素的灰度值。它们是按行存储的,第一行是最上面的,然后逐渐向下移动图像。嗯。
magick image.ppm result.png    # convert to PNG
magick image.ppm result.jpg    # convert to JPEG