必威体育Betway必威体育官网
当前位置:首页 > IT技术

Mitre SFR 1.4在Windows上用Visual Studio2013 成功运行 及详解

时间:2019-10-23 13:43:16来源:IT技术作者:seo实验室小编阅读:78次「手机版」
 

mitre

目录

代码及简单说明

什么是MTF, SFR

Mitre SFR 1.4代码组成

如何编译

如何使用

出现的错误及解决办法

1. 错误 fatal ERROR C1083: cannot open include file: 'unistd.h': No such file or directory 

2. fatal error C1083: Cannot open include file: 'libgen.h': No such file or directory

3. error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead.

4. error C4996: 'open': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _open. See online help for details.

5. 【重点】最简单的解决办法

成功运行截图


代码及简单说明

什么是MTF, SFR

【图像处理】SFR算法详解1

https://blog.csdn.net/jaych/article/details/50889664

【图像处理】SFR算法详解2

https://blog.csdn.net/jaych/article/details/50700576

【图像处理】SFR算法详解3

https://blog.csdn.net/jaych/article/details/51030939

【图像处理】SFR算法详解4

https://blog.csdn.net/jaych/article/details/51031064

Mitre SFR 1.4代码组成

在ReadMe.txt中:

mitre_sfr.c The wrAPPer/main code
sfr_iso.c the derived ISO code;Code predominantly modified from IS 12233:2000 Annex A
find_area.c The auto-refinement code

代码链接:

http://www2.mitre.org/tech/mtf/sfr.zip

如何编译

在ReadMe.txt中

This code is compiled with LIBTIFF.  Once libtiff is installed

compile the code in this directory using 'make'.  

(If necessary add additional LDFLAGS to identify library locations.)

Open a terminal and 

> cd <this-dir>

> make 

如何使用

请参考In-Out.doc。在控制台运行SFR_1.4.2.exe,红色标记的为控制台输入部分

SFR version 1.4.2

a      Compute edge tilt angle from user entered points

b      Auto-refine input region

c      ROI defined by center point instead of UL corner

d      Create diagnostic image (_box.pgm)

e      Verbose output

f      Reverse image polarity

h      Help & Program notice

n      Don't compare output to PIV spec

Enter run options...or...Press RETURN if none:Enter(回车)

Enter image filename:          Edge.pgm

OECF: if nonlinear enter filename, if linear press RETURN oecf.txt

Enter pixels per inch (PPI):   500

(ref: col,row = 0,0 at upper left corner of ENTIRE image,

cols increase left to right, rows increase top to bottom.)

Enter Col, Row for UL pixel of ROI:    130 66

Enter Width, Height for region of interest:    120 260

出现的错误及解决办法

1. 错误 fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory 

解决办法:包含这个头文件是使用到chdir()这个函数功能

unistd.h是linux下的,windows不支持linux的系统调用。

头文件unistd.h是Linux/Unix的系统调用,包含了许多UNIX系统服务函数原型,如open、read、write、_exit、getpid等函数。在linux下能够编译通过的包含此头文件的程序,在VS下编译时出现了如下问题

fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory

只要在默认库文件夹下(我的电脑是 c:\program files (x86)\microsoft visual studio 12.0\vc\include\)添加一个unistd.h文件即可,其内容如下:  

#ifndef _UNISTD_H
#define _UNISTD_H
#include <io.h>
#include <process.h>
#endif/* _UNISTD_H */

这样在重新编译包含unis.h的程序就能通过了

参考

https://stackoverflow.com/questions/22705751/cannot-open-include-file-unistd-h-no-such-file-or-directory

https://stackoverflow.com/questions/2793413/unistd-h-related-difficulty-when-compiling-bison-flex-program-under-vc/2872995#2872995

2. fatal error C1083: Cannot open include file: 'libgen.h': No such file or directory

包含这个头文件就使用到dirname()一个函数:用来获取文件夹名称

解决办法

Step#1 

dirname是Unix/Linux下的函数,Windows平台是没有的,参考Stack Overflow上的建议,

使用Windows下的函数 _splitpath_s自己简单实现了一个dirname()【可以使用,待后续完善】

Visual Studio does neither have this header nor these functions. If using _splitpath_s, _wsplitpath_s isn't an option, then you have to write them by yourself.

参考链接:https://stackoverflow.com/questions/30564944/cannot-open-include-file-libgen-h

Step#2 dirname()代码

// crt_makepath_s.c
#include <stdlib.h>		//_splitpath_s, _makepath_s
#include <stdio.h>		//printf

char finalDirName[_MAX_DIR];	//最终返回的文件夹名称
char * dirname(char * fullpath)
{	
	char drive[_MAX_DRIVE];			//路径中的盘符,例如"d:"
	char dir[_MAX_DIR];				//文件夹,例如"\sample\crt\"
	char fname[_MAX_FNAME];			//文件名称,例如"crt_makepath_s"
	char ext[_MAX_EXT];				//文件扩展名,例如".c"
	errno_t err;	
	err = _splitpath_s(fullpath, drive, _MAX_DRIVE, dir, _MAX_DIR, fname,
		_MAX_FNAME, ext, _MAX_EXT);		//拆分路径
	if (err != 0)
	{
		printf("Error splitting the path. Error code %d.\n", err);
		exit(1);
	}
	sprintf(finalDirName, "%s%s", drive, dir);	//文件夹全路径,例如"d:\sample\crt\"
	printf("DirName: %s\n", finalDirName);
	return finalDirName;
}
int main(int argc, char **argv)
{
	char *fnamep;
	fnamep = dirname(argv[0]);	
	printf("Custome Dir:%s\n", fnamep);	
	return 0;
}

关于_splitpath_s的说明与范例代码可以参考如下Microsoft官网说明

https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/splitpath-s-wsplitpath-s?view=vs-2019

https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/makepath-s-wmakepath-s?view=vs-2019

3. error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead.

To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\stdio.h(211) : see declaration of 'fopen'

其他类似错误:

error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

在预处理器中添加“_CRT_SECURE_NO_WARNINGS”

4. error C4996: 'open': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _open. See online help for details.

打开工程文件的属性->c/c++->预处理器->预处理器定义   中添加:

【DEBUG模式下】

_CRT_SECURE_NO_WARNINGS

_CRT_NONSTDC_NO_DEPRECATE 

【RElease 模式下】

_CRT_SECURE_NO_WARNINGS

_CRT_NONSTDC_NO_DEFPRECATES

参考网址:https://blog.csdn.net/u010368556/article/details/79344265

5. 【重点】最简单的解决办法

后来仔细观察代码,发现只要做这简单的两步即可。前面1-4可以不用看了。

1. mitre_sfr.c在“#if !defined(msdos)”前面添加下面几句宏定义即可

#ifndef MSDOS
#define MSDOS
#endif

2. 打开工程文件的属性->c/c++->预处理器->预处理器定义   中添加:

_CRT_SECURE_NO_WARNINGS

成功运行截图

文章最后发布于: 2019-08-20 10:51:15

相关阅读

IOS 11.4可以越狱了!Electra发布越狱工具

A5创业网(公众号:iadmin5)7月11日报道,上周Electra发布IOS 11.2和IOS11.3.1的越狱工具,不过并不支持IOS11.4.如今Electra团队终于发布

蒸压加气混凝土砌块荷载系数1.4取值依据

蒸压加气混凝土砌块荷载系数1.4取值依据 计算依据: GB11968-2006《蒸压加气混凝土砌块》CECS 289-2011 《蒸压加气混凝土砌块砌体

局域网QQ第三版(V1.4)

原文地址为:局域网QQ第三版(V1.4)局域网QQ,无客户端和服务端之分,局域网的计算机运行本程序就可以互相看见,可以自由聊天和传文件。本版

女大学生应聘兼职模特被骗1.4万,网上的模特兼职可信吗

近日,一女大学生利用暑假想做兼职模特,不料却被所谓的模特公司以叫各种费用为由骗走了1.4万元。这不禁让人产生疑惑,网上的模特兼职

分享到:

栏目导航

推荐阅读

热门阅读