近期在做船仅仅识别方面的事情,须要大量的负样本来训练adaboost分类器。

我从网上下载到一个pascal_voc的数据集。须要找到不包括船仅仅的那些复制出来。

数据集特点

对于每一个图片有一个xml文件。介绍了这个文件的信息,有个object标签介绍了图片中目标类别



比方上面这副图片的xml文件为:


<annotation>
<folder>VOC2007</folder>
<filename>000001.jpg</filename>
<source>
<database>The VOC2007 Database</database>
<annotation>PASCAL VOC2007</annotation>
<image>flickr</image>
<flickrid>341012865</flickrid>
</source>
<owner>
<flickrid>Fried Camels</flickrid>
<name>Jinky the Fruit Bat</name>
</owner>
<size>
<width>353</width>
<height>500</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>dog</name>
<pose>Left</pose>
<truncated>1</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>48</xmin>
<ymin>240</ymin>
<xmax>195</xmax>
<ymax>371</ymax>
</bndbox>
</object>
<object>
<name>person</name>
<pose>Left</pose>
<truncated>1</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>8</xmin>
<ymin>12</ymin>
<xmax>352</xmax>
<ymax>498</ymax>
</bndbox>
</object>
</annotation>

比方上面这个就包括dog和person

解决方式

我们须要做的就是这道叶子节点里的name看是不是boat假设不是的话就取到这个图片

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml; namespace 获取负样本
{
class Program
{
static void Main(string[] args)
{
/*首先获取xml文件夹下的全部文件的文件夹列表和名称*/
//List<string> fileNames = new List<string>();//存储文件名称;
//C:\Users\dragonfive\Desktop\pascal_voc\VOCtrainval_06-Nov-2007\VOCdevkit\VOC2007\Annotations
string path = @"C:\Users\dragonfive\Desktop\pascal_voc\VOCtrainval_06-Nov-2007\VOCdevkit\VOC2007\Annotations\";
string imageSourcePath = @"C:\Users\dragonfive\Desktop\pascal_voc\VOCtrainval_06-Nov-2007\VOCdevkit\VOC2007\JPEGImages\";
string imageDestPath = @"D:\IP_CV_WorkSpace\Img\NegSample\";
int numberOfNegSample = 0;
foreach (var file in Directory.GetFiles(path,"*.xml"))//这个获取的文件名称带前面的文件夹;
{
//Console.WriteLine(file);
//获取该路径的不带扩展名的文件名称;
string fileName = Path.GetFileNameWithoutExtension(file);
//Console.WriteLine(fileName);
//以下读取xml的内容
//string xmlData = File.ReadAllText(file, Encoding.Default);
//Console.WriteLine(xmlData);
/*循环完毕每一个xml文件的解析,假设没有boat就拷贝到新的文件夹*/
XmlDocument doc = new XmlDocument();
doc.Load(file);
XmlElement root = doc.DocumentElement; XmlNodeList listNodes = root.SelectNodes("/annotation/object/name");
bool hasBoat = false;
foreach (XmlNode node in listNodes )
{
//Console.WriteLine(node.InnerText);
//假设当中含有boat就continue,否则赋值到负样本的位置;
if (node.InnerText == "boat")
{
hasBoat = true;
Console.WriteLine(fileName+"里面有船");
break;
}
}
if (hasBoat==false)
{
//复制
File.Copy(imageSourcePath + fileName + ".jpg", imageDestPath + fileName + ".jpg",true);
Console.WriteLine("成功复制"+fileName);
numberOfNegSample++;
} //Console.ReadKey();
} Console.WriteLine("共计复制负样本个数为:" + numberOfNegSample);
Console.ReadKey();
}
}
}

c#解析XML文件来获得pascal_voc特定目标负样本的更多相关文章

  1. 在tomcat启动时解析xml文件,获取特定标签的属性值,并将属性值设置到静态变量里

    这里以解析hibernate.cfg.xml数据库配置信息为例,运用dom4j的解析方式来解析xml文件. 1.在javaWeb工程里新建一个java类,命名为GetXmlValue.java,为xm ...

  2. 【Android学习笔记】XmlResourceParser解析xml文件

    最近学习Android时,需要用到解析XML文件里的数据,可以用XmlResourceParser来解析xml文件,正好将此记录下来. XmlResourceParser里常用的字段和方法 首先先给出 ...

  3. 转:VC解析XML文件-CMarkup的使用详解

    本篇文章是对VC解析XML文件-CMarkup的使用进行了详细的分析介绍,需要的朋友参考下 VC解析XML文件的工具有很多,CMarkup, tinyXML,还有IBM的,MS的等等. 据说tinyX ...

  4. 深入浅出如何解析xml文件---下篇

    在上篇博文中,小编主要介绍xml的两种解析方式,分别是dom4j和dom,今天这篇博文,小编主要来简单介绍一下xml的其她两种解析方式sax和jdom.  sax解析xml文件 sax,全称是Simp ...

  5. 深入浅出如何解析xml文件---上篇

    xml小伙伴们并不陌生,xml是可扩展标记语言,标准通用标记语言语言的子集,是一种用来标记电子文件使其具有结构性的标记语言.我们知道xml可以用dom与sax等方法进行解析,但是xml为什么要解析呢? ...

  6. 使用Java解析XML文件或XML字符串的例子

    转: 使用Java解析XML文件或XML字符串的例子 2017年09月16日 11:36:18 inter_peng 阅读数:4561 标签: JavaXML-Parserdom4j 更多 个人分类: ...

  7. 解析XML文件的几种方式及其比较

    解析xml文件目前比较流行的主要有四种方式: 1. DOM(Document Object Model)它把整个XML文档当成一个对象加载到内  存,不管文档有多大.它一般处理小文件 2.SAX(Si ...

  8. 转载 VC轻松解析XML文件 - CMarkup类的使用方法

    VC轻松解析XML文件 - CMarkup类的使用方法http://www.cctry.com/thread-3866-1-1.html VC解析XML文件的工具有很多,CMarkup, tinyXM ...

  9. Android程序解析XML文件的方法及使用PULL解析XML案例

    一.一般解析XML文件的方法有SAX和DOM.PULL (1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信 ...

随机推荐

  1. S3C2440串口的基本使用

    2440A有三个串口,我们使用串口0对它进行了解熟悉. 首先肯定是应该找到手册上串口0所对应的引脚,然后配置相应寄存器. 串口0对应GPIO H的 2,3 串口在单片机中我们已经有很多使用经验了,对于 ...

  2. BAT-局域网内在线电脑IP

    相关资料:朋友发来的,来源不明. 问题现象:有个朋友问我都在一个内网中,电脑A没有显示器,怎么找到它的IP. 问题处理: 1.登陆路由器查看IP在线情况. 2.用BAT文件显示出在线IP. 显示局域网 ...

  3. C# if为false仍然进入方法体,==和qeual结果不一致

    场景: 代码: if( e.Key == Key.Tab) { // ... } 断点调试:结果为false,进入方法体   ??? 更改为: if(Key.Tab.Equals(e.key)) { ...

  4. UltraEdit 常用快捷方式

    Ctrl+N :创建一个新文件 Ctrl+O :打开文件 Ctrl+Q :快速打开文件 Ctrl+F4 :关闭文件 Ctrl+S :保存活动文件 F12 :另存为 Ctrl+P :打印当前活动文件 C ...

  5. NETCONF+Yang配置TSN

    NETCONF用来替换SNMP,是一个网管协议.YANG是NETCONF的数据建模语言,可以使用Yang模式的文本配置网关,从而通过NETCONF协议管理网关. NETCONF+Yang可用于TSN( ...

  6. Git教程首页

    Git 教程 Git 是一个分布式的版本控制和源代码管理系统,强调速度. Git 最初由Linus Torvalds设计和开发为Linux内核开发管理代码. Git是GNU通用公共许可证版本2的条款下 ...

  7. 【C】——C语言字符串比较函数

    c语言字符串函数详解 void *memset(void *dest, int c, size_t count); 将dest前面count个字符置为字符c. 返回dest的值. void *memm ...

  8. CLR、内存分配和垃圾回收

    一.CLR CLR:即公共语言运行时(Common Language Runtime),是中间语言(IL)的运行时环境,负责将编译生成的MSIL编译成计算机可以识别的机器码,负责资源管理(内存分配和垃 ...

  9. mybatis中的#{}和${}区别

    mybatis中的#{}和${}区别 2017年05月19日 13:59:24 阅读数:16165 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #use ...

  10. POST数据时400错误

    第一种解决办法是关闭Csrf public function init(){ $this->enableCsrfValidation = false; } 第二种解决办法是在form表单中加入隐 ...