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

非常感謝以下兩個博客:

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裏填上即可。
中文版:
菜單[項目] -> 屬性頁 -> 配置屬性 -> 調試
在[命令行參數]裏填上即可。








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章