uc伯克利人工分割图像.seg文件解析

之前看到



http://www.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/segbench/

提供的人工图像分割的.seg格式的文件,他们提供了linux系统下面的matlab代码,什么的,但是我们要在windows平台下面用就比较麻烦,就心血来潮写一个试试,还请大牛们指点一二啊,嘿嘿嘿

下面是SegHuman.h

/*
// # Reload me!
//
// SEGMENTATION FILE FORMAT
// 	David Martin
// 	8/2/2001
//
// 	This document describes the segmentation file format.  Segmentation
// 	files end in ".seg".
//
// 	The overall structure of the file is as follows:
//
// <header>
// 	data
// 	<data>
//
// 	The first part of the file is the header.  The header is ascii text,
// 	and can contain comments.  The comment character is '#'.  The header
// 	is separated from the data with a line containing the literal text
// 	"data".
//
// 	The header can contain the following information, in any order:
//
// format {*ascii|binary} {*cr|map}
// date <date string>
// 	image <int>	# image ID number
// 	user <int>	# user ID number
// 	width <int>	# width of image
// 	height <int>	# height of image
// 	segments <int>	# number of segments
// 	gray {*0|1}	# image presented in grayscale?
// 	invert {*0|1}	# image presented with pixel values inverted?
// 	flipflop {*0|1}	# image presented upside-down and backwards?
//
// 	The {width,height,segments} lines are required.  All others lines are
// 	optional.  Default values are marked with a '*'.
//
// 	The format line describes the format of the data section of the file.
// 	The default and recommended format is 'ascii cr' (cr = compressed
// 	row).  This document does not describe the other formats, as they are
// 	probably superfluous.
//
// 	The 'ascii cr' format is designed to be very easy to parse; it is not
// 	optimized for space.  Use gzip if you want smaller files!  Each line
// 	in the data section contains 4 integers:
//
// <s> <r> <c1> <c2>
//
// 	All values start counting at 0.  <s> is the segment number; <r> is the
// 	row; <c1> and <c2> are column numbers.  The line means that columns
// 	[<c1>..<c2>] of row <r> belong to segment <s>.  Lines of this sort can
// 	appear in any order, and can be reordered without harm.  The only
// 	restriction is that each pixel must be named exactly once.
//
// 	END
//
//
*/

#ifndef SEG_HUMAN
#define SEG_HUMAN

#include "stdafx.h"
#include "stdio.h"
#include <map>
#include <vector>
#include <queue>
#include <set>
#include <string>
#include <list>

#include <iostream>
using namespace std;

struct SEG
{
	int segment_number;
	int row;
	int column_number1;
	int column_number2;
};

class SegHuman
{
public:
	SegHuman(const char* path);
	bool LoadSEG(const char* path);

private:
	string name;
	int image_index;
	int segments_index;
	int height;
	int width;
	int gray;
	vector<SEG> MySeg;
};

#endif // SEGHMAN

下面是:SegHuman.cpp

#include "stdafx.h"
#include "SegHuman.h"

#include <iostream>
using namespace std;

SegHuman::SegHuman(const char* path)
{
	LoadSEG(path);
}

bool SegHuman::LoadSEG(const char* path)
{
int st = 0;
FILE* pfile = fopen(path, "r");
if (pfile)
{
	fseek(pfile,0,SEEK_END);
	int dwsize = ftell(pfile);
	rewind(pfile);

	char* filebuffer = new char[dwsize];
	fread(filebuffer, 1, dwsize, pfile);

	char* pBegin = filebuffer;
	char* pEnd = strchr(filebuffer, '\n');
	int uiIndex = 1;

	int st = 0;

	while (pEnd != NULL)
	{

		std::string strbuff;
		strbuff.insert(0, pBegin, pEnd-pBegin);
		if (strbuff.empty())
		{
			return false;
		}

		if (st==0)
		{
		if (1 == sscanf(strbuff.c_str(),"image %d",&image_index)) st=1;
		}
		else if (st==1)
		{
			if (1 == sscanf(strbuff.c_str(),"width %d",&width)) st=2;
		}
		else if (st==2)
		{
			if (1 == sscanf(strbuff.c_str(),"height %d",&height)) st=3;
		}
		else if (st==3)
		{
			if (1 == sscanf(strbuff.c_str(),"segments %d",&segments_index)) st=4;
		}
		else if (st==4)
		{
			if (1 == sscanf(strbuff.c_str(),"gray %d",&gray)) st=5;
		}
		else if (st==5)
		{
			if (0==strcmp(strbuff.c_str(),"data")) st=6;
		}
		else if (st==6)
		{
			SEG temp = { -1, -1, -1, -1};
if (4 == sscanf(strbuff.c_str(),"%d %d %d %d",&temp.segment_number, &temp.row, &temp.column_number1 , &temp.column_number2))
			{
				++uiIndex;
				MySeg.push_back(temp);

			}
	}

			pBegin = pEnd + 1;
			pEnd = strchr(pEnd + 1, '\n');

		}
		delete[] filebuffer;
		fclose(pfile);

		vector<SEG>::iterator iter = MySeg.begin();
		for (;iter !=MySeg.end(); ++iter)
		{
			cout<<iter->segment_number<<' ';
			cout<<iter->row<<' ';
			cout<<iter->column_number1 <<' ';
			cout<<iter->column_number2<<' ';
			cout<<endl;

		}
		getchar();

		return true;
	}

	return false;
}

下面的任务就是修改代码,把它用在OpenCV中,来显示人工分割的图像啦!

时间: 2024-11-05 12:27:31

uc伯克利人工分割图像.seg文件解析的相关文章

Michael I. Jordan联合UC伯克利13位重量级学者:下一代人工智能系统的4大趋势和9大研究课题

Michael I. Jordan 简介: LDA作者,机器学习泰斗,美国科学院/工程院/艺术科学院三院院士,ACM/AAAI Fellow,认知科学最高奖Rumelhart Prize得主,美国人工智能协会的艾伦奖得主,2016年入选最有影响力的计算机科学家. 论文:A Berkeley View of Systems Challenges for AI 论文链接:https://www2.eecs.berkeley.edu/Pubs/TechRpts/2017/EECS-2017-159.p

图片像素对比OpenCV实现,实现人工分割跟算法分割图像结果的对比

图片对比,计算不同像素个数,已经比率.实现人工分割跟算法分割图像结果的对比,但是只能用灰度图像作为输入   // imageMaskComparison.cpp : 定义控制台应用程序的入口点. // // imageMaskComparison.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.h

英伟达、UC伯克利联合研究:条件GAN高分辨率图像合成与语义编辑pix2pixHD(论文+代码)

英伟达和UC Berkeley的研究者最近公开一个名为pix2pixHD的"用条件GAN进行2048x1024分辨率的图像合成和处理"项目,并公开了论文和代码.pix2pixHD能够利用语义标注图还原接近真实的现实世界图像,例如街景图.人脸图像等,并且只需简单的操作即可修改和搭配图像. 图:上方是输入的语义地图,下方是pix2pixHD合成图像 作者发布的视频介绍中,可以看到,你可以选择更换街景中车辆的颜色和型号,给街景图增加一些树木,或者改变街道类型(例如将水泥路变成十字路).类似地

htmlcxx中css文件解析中yyparse有内存泄露,哪位大神能不能帮忙看一下

问题描述 htmlcxx中css文件解析中yyparse有内存泄露,哪位大神能不能帮忙看一下 使用最新版的htmlcxx0.85版,把内部的css解析部分抽出之后,检测出内存泄露

UC浏览器无法打开下载的文件怎么办?

  有的时候用UC浏览器下载一个东西,但是却打不开它,这可怎么办呢?UC浏览器无法打开下载的文件怎么办?你想要知道吗?想要知道的话,下面就请跟小编一起来看看UC浏览器无法打开下载的文件解决办法吧! UC浏览器打不开下载的文件有三种解决办法: 1.当打开下载文件出现"文件无效","文件损坏"等提示时,先确认下载的文件大小是否同下载源的一致.当网络连接不稳定的情况下进行文件下载,可能会导致文件下载不完整.如是这种情况,重新下载该文件一般就可解决问题. 2.UC浏览器的&

sax-xml文件解析时报错,久不得解

问题描述 xml文件解析时报错,久不得解 报错的语句:Document document = builder.parse(new Proxool().getClass().getResourceAsStream("/proxool.xml")); 这是我的xml文件: 我就郁闷了,求指点~ 解决方案 jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF-8 解决方案二: UTF-8改成utf8试

javascript-页面js文件解析执行过程

问题描述 页面js文件解析执行过程 在高性能javascript书中有如下讲解,感觉甚是不懂!如下:每个文件必须等到前一个文件下载并执行完成才开始下载.如下图:(http://img.ask.csdn.net/upload/201508/25/1440490986_104397.png) 疑问:一些外部引入的js文件不是不能被执行么,还有那些页面加载完后再执行的js文件,这里为什么是下载并执行呢!又晕了,求大神解答!感谢! 解决方案 这个要看你的htnl怎么写的,如果是外部js,那么肯定是先下载

json文件解析。。。。。。。

问题描述 json文件解析....... [ {"id":"100","age":"1","name":"张三"}, {"id":"101","age":"2","name":"李四"}, {"id":"102","ag

html c++-如何读取本地html文件,并将该文件解析,根据解析的数据创建新的html

问题描述 如何读取本地html文件,并将该文件解析,根据解析的数据创建新的html 问题是这样的: 我在网上获取了别人的html源代码后,把源代码保存到本地html,然后通过什么样的方法读取到里面table的数据,再根据这些数据构建一个新的html文件,再另存到本地 相当于这么一个软件,输入时别人的html源代码,输出我重新整理好的html文件,不知道大家能不能懂--汗,我知道js是无法获得本地文件,所以只能依赖其他平台来处理html 请各位大侠给点思路,比如c++? 解决方案 java jso