VS2012上的IPOL上的non-local means源程序

来源:互联网 发布:知乎回答过的问题 编辑:程序博客网 时间:2024/06/14 04:58

非常感谢以下两个博客:

IPOL上的non-local means源程序的移植过程:http://blog.csdn.net/tuyang120428941/article/details/7052487

libpng安装与配置(Win7+VS2010):http://www.cnblogs.com/lvrcbl/p/3962463.html

本篇文章是我遇到的问题的整合以及使用这两个博客解决的总结,希望两位作者能理解我这里复制了大量的内容。

一、libpng环境

libpng:http://libmng.com/pub/png/libpng.html

zlib:http://www.zlib.net/

IDE:VS2012

将下载的两个zip解压到同一目录下 即放如:c:\libpng c:\zlib

打开ibpng目录下的projects\vstudio中的工程文件(低版本的VS可以打开projects\visualc71中的工程)。

参考readme,里面先修改C:\lpng1626\projects\vstudio\zlib.props中的zlib路径:<ZLibSrcDir>c:\zlib-1.2.8</ZLibSrcDir>

编译运行,在输出目录(Debug或Realse)中得到输出文件libpng16.dll、libpng16.lib、zlib.lib。

在编译运行时,有问题时,整个工程先清理一下再试。

二、创建工程

创建一个工程,将之前下载的程序导入这个工程中

右键点击工程名打开Properties(属性)对话框

在C/C++->General(常规)->Additional Include Directories(附加包含目录)中添加libpng目录

在Linker->General(常规)->Additional Library Directories(附加库目录)中添加刚刚生成的lib文件所在的路径

在Linker->Input(输入)->Additional Dependencies(附加依赖项)中添加libpng16.lib、zlib.lib两个文件

做好上述工作之后,我们进行编译,发现报错:
    Cannot open include file: 'unistd.h',一查发现这unistd.h是UNIX下使用的库函数头文件,类似于windows下的'windows.h',这里的话,为了不让其报错,我们可以自己先写一个unistd.h文件,然后再看会报什么错,unistd.h的内容为:

/** This file is part of the Mingw32 package.
* unistd.h maps (roughly) to io.h
*/
#ifndef _UNISTD_H
#define _UNISTD_H

#include <io.h>
#include <process.h>

#endif /* _UNISTD_H */

    由于我们是在当前目录中引用这个unistd.h这个头文件,所以需要将#include <unistd.h>改成#include "unistd.h",然后继续编译,继续报错:
1. 'M_PI' : undeclared identifier
2. 'rintf': identifier not found
    首先我们可以查下M_PI是一个宏,实际上cmath函数里的,但是无法识别,这个好像是一个C/C+标准函数库的一个bug,解决方法很简单,
    在libauxiliar.h这个头文件中加入
#define _USE_MATH_DEFINES
    这个宏定义,就OK。
    rintf是一个四舍五入函数,在这里我们可以将
int iLutLength = (int) rintf((float) LUTMAX * (float) LUTPRECISION);
改成
int iLutLength = (int) ((float) LUTMAX * (float) LUTPRECISION+0.5);
    效果是一样的。继续编译,然后又报错,
   _main already defined in nlmeans_ipol.obj

    这是因为在这个工程里面有三个main函数,由于我们这里只是为了使用NLM进行去噪,所以img_diff_ipol.cpp和img_mse_ipol.cpp这两个文件我们可以暂时先从当前工程中删除掉,
    然后再编译,这时候我出现
提示缺少libpng16.dll,则将刚刚生成的libpng16.dll文件复制到工程目录(Debug或Realse)中即可。也可以复制到系统目录Windows\System32(64位操作系统需复制到Windows\SysWOW64)中。
然后就编译成功了。
    现在传递一下参数,这里我的标准差是sigma=30,in.png 图片放在项目文件夹下,后面两个参数是处理的噪声图和去噪图的名字
   ---> in.png 30 noisy.png denoised.png
菜单Project -> Properties -> Configuration Properties -> Debugging
在Command Arguments里填上即可。
中文版:
菜单[项目] -> 属性页 -> 配置属性 -> 调试
在[命令行参数]里填上即可。








0 0
原创粉丝点击