2010年11月26日 星期五

在DEV-C++環境使用OpenCV-2.1.0-win32-vs2008計算PSNR範例[程式碼篇]

在DEV-C++環境
使用OpenCV
計算PSNR範例

環境:
DEV-C++ :devcpp-4.9.9.2_setup.exe
opencv :OpenCV-2.1.0-win32-vs2008.exe


上次提到

上網 Google一下

------------------------------------------------------------------

網友patrick

OPENCV PSNR计算方法

http://quntingyang.spaces.live.com/blog/cns!531ADA1CF4C7FF2E!272.entry

------------------------------------------------------------------

カクタス榎木

------------------------------------------------------------------


都有寫好的範例

而且還好心的函式化了

想要快速使用

接呼叫(call function)或改寫成主程式(main)都是不錯的好方法

要惡補OpenCV語法的
可以在本系學長的 "昨日OpenCV"網站溫習一下

昨日OpenCV:
http://yester-place.blogspot.com/


所以本次就來完補啦

立即撰寫一個範例

函式再度改回主程式(main)

本範例改寫
網友patrick

OPENCV PSNR计算方法

先奉上程式碼,可以看註解,後面有補說明






解說之彩色網頁程式碼轉換顯示 使用: c# code format 網站









#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
int main()
{
double totalValue=0;
double psnr=0.0;
IplImage *srcImage = cvLoadImage("House512.BMP",1);
IplImage *dstImage = cvLoadImage("House5122.BMP",1);


int NR(srcImage->height),NC(srcImage->width);
if (srcImage->width!=dstImage->width||srcImage->height!=dstImage->height)
{
std::cout<<"usage: Two images must have same size!"<<std::endl;
return FALSE;
}else if (srcImage->nChannels!=dstImage->nChannels)
{
std::cout<<"usage:Two images must have same channels\n 1 dimension\n 3 dimension\n";
return FALSE;
}
//若圖片是灰階,直接算totalValue
else if (srcImage->nChannels==1||dstImage->nChannels==1)
{
for (int i=0;i<NR;i++)
{
for (int j=0;j<NC;j++)
{
double s1 = cvGetReal2D(srcImage,i,j);//取得像素值
double s2 = cvGetReal2D(dstImage,i,j);
double sub = s1-s2;
totalValue +=pow(sub,2);
}
}

}
//若圖片是彩色,先轉灰階後,計算totalValue
else if(srcImage->nChannels==3||dstImage->nChannels==3)
{
IplImage *srcData = 0, *dstData= 0;
srcData = cvCreateImage( cvSize(NR, NC), IPL_DEPTH_8U, 1 );
dstData = cvCreateImage( cvSize(NR, NC), IPL_DEPTH_8U, 1 );
cvCvtColor(srcImage,srcData,CV_BGR2GRAY);
cvCvtColor(dstImage,dstData,CV_BGR2GRAY);
for (int i=0;i<NR;i++)
{
for (int j=0;j<NC;j++)
{
double s1 = cvGetReal2D(srcData,i,j);//取得像素值
double s2 = cvGetReal2D(dstData,i,j);
double sub = s1-s2;
totalValue +=pow(sub,2);
}
}

}
if (fabs(totalValue) < 1e-6)
{
psnr = 0;
}
else
{
double meanValue = totalValue/(NR*NC);
psnr = 10*log((255*255)/meanValue);
}
printf("\n計算PSNR為:%f\n",psnr);
system("pause");
//return TRUE;

}






■引用說明:
#include //宣告IplImage所需
#include //宣告 cvLoadImage 所需

■宣告說明:
IplImage //OpenCV Image物件 ;物件化圖片,並給予結構如之後有用到的 ->height、->width


■OpenCV函式說明:

cvLoadImage
/* OpenCV 載入圖片函式 結構為CVAPI(IplImage*) cvLoadImage( const char* filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR)); */

cvGetReal2D(Image物件,i,j);//取得像素值
/* 是取得Image物件裡面(row,column)
*/

■變數說明:
nChannels // ==1 是灰階; ==3是全彩
1e-6 //我們通常會用一個不合理的狀況作為例外排除,而通常是使用-1或1e-6

■C++基本語法...
std::cout<<"X"<<std::endl //印X

2010年11月7日 星期日

在DEV-C++環境使用OpenCV-2.1.0-win32-vs2008計算PSNR範例[環境設定篇]



在DEV-C++環境
使用OpenCV
計算PSNR範例


環境:
DEV-C++ :devcpp-4.9.9.2_setup.exe
opencv :OpenCV-2.1.0-win32-vs2008.exe



很久沒有Open CV了,倒是很長Open GL

稍稍整理了網路上的OpenCV教學

發現新版OpenCV-2.1.0-win32-vs2008.exe

剛好學弟們在修影像處理

快速解決一下他們的疑難雜症

首先是

OpenCV-2.1.0-win32-vs2008.exe安裝教學


設定

我們將假設OpenCV是安裝在C:\Program Files\OpenCV的 目錄。

首先,選擇 工具“>編譯器選項。



然後點綠色的 加號 標誌
添加一個新的編譯器,並命名為 OpenCV





完成後,

之前舊版OpenCV 是添加...

-L"C:\Program Files\OpenCV\lib" -lcxcore -lcv -lcvaux -lhighgui -lml -lcvcam

openCVOptions.jpg


但新版OpenCV 2.1 請填:


-L"C:\OpenCV2.1\lib" -lcxcore210 -lcv210 -lcvaux210 -lhighgui210 -lml210

Include files的設定

接下來,點擊 目錄 ,

然後在 C Include files 添加

C:\Program Files\OpenCV2.1\include\opencv



當然,如果你想編寫C + +程序,

在 C + + Include files 再同樣做一次



函式庫的設定


對於OpenCV2.x沒有 otherlibs \ highgui 文件夾

因此只需添加 C:\Program FIles\OpenCV2.x\bin 就足夠了。



動態庫文件的配置

並完成,添加的bin目錄下的DLL:


測試


讓我們選擇一個C程式在 OpenCV的 samples目錄中 ,

並嘗試執行它,按下鍵盤 F9鍵。 正如你所看到的,編譯過了。

compileProgress.jpg

範例目錄:C:\OpenCV2.1\samples


上網 Google一下

------------------------------------------------------------------

網友patrick

OPENCV PSNR计算方法

http://quntingyang.spaces.live.com/blog/cns!531ADA1CF4C7FF2E!272.entry

------------------------------------------------------------------

カクタス榎木

------------------------------------------------------------------


都有寫好的範例

而且還好心的函式化了

想要快速使用

接呼叫(call function)或改寫成主程式(main)都是不錯的好方法

要惡補OpenCV語法的
可以在本系學長的 "昨日OpenCV"網站溫習一下

昨日OpenCV:
http://yester-place.blogspot.com/



孩子們 加油吧!

送佛送到中間,西天要自己去,阿!是西經要自己取啦....

別再說Google咕不到了....

2010年8月14日 星期六

[攝影]半紅外線攝影-彩色IR (part 2)-後製

[part 2]要介紹的是PS(Photoshop)後製

光圈設定的討論請等[part 3]

先來張成品如下

(點圖可放大)
謎之OS
(終於T..T拍出跟別人部落格長得像的作品了...
而且相機上直接綠色白平衡還是一次都沒成功...哈哈...)


我用PS處理RAW檔,RAW原始色溫為5450,如下圖黃色圈出處,可以看見一片紅通通啊...
PS降色溫圖示

接下來,如黃色編號的步驟:
1.點選白平衡取色工具
2.在實景樹木綠葉中最白處點一下
可以看到澄色圈選處的色溫已經自動降到最低了

手動後製白平衡圖示

然後是一連串的標準動作組合
標準動作0.是降色溫的手動綠色白平衡
這是因為我一定要有,但是網路上很多在相機上成功白平衡的人就不需要了,
所以我推薦我自己的特別流程
第一種是:1.→2.→4. 完成
第二種是:1.→2.完成
第三種是:1.→2.→3.→4.→5.→6.→7.完成
第四種是:1.→7.→2.完成

說明一下標準動作,
標準動作4.就是紅藍色版對調(網路上其他人幾乎將這動作當半/彩色IR的標準後製動作了!)
至於第三種1.→2.→3.→4.→5.→6.→7.完成,
是我這次的定稿選擇方案,
但是應該不會成為我固定的標準後製動作,
畢竟有時候Fu就是不一樣....
所以我在後面有列0.到7.的過程,供大家參考!

標準動作組合示意圖


其實像是第二種1.→2.僅有自動色階就直接完成的方案也是很有特色,下次試試看有人物,不知道效果如何...
第二種是:1.→2.完成的圖

0.→1.→2.→3.→4.→5.→6.→7.流程示意圖(點此放大)

紅藍色版的步驟後,藍出現了,但是藍的很不滿意,所以才再發展再次5.自動色階6.自動色彩7.自動對比,但其實還是跟我想要的藍有差距,要是能自動藍就好了....(謎之聲.可能是"傷心咖啡店之歌"重看不下十遍的後遺症...XD)



大家有沒有發現,我在[part 1]有一塊中間紅紅的,這次作品沒有出現耶!目前推論是跟拍照時光圈設定有關,還好不是因為濾鏡缺陷,不然真的會嘔氣!期待可以早日完成光圈實驗在[part 3]跟大家分享!


2010年8月2日 星期一

[攝影]半紅外線攝影-彩色IR (part 1)




用sony V1 nightshot 直接拍的紅外線照片


正常模式



NIKON D90+IR720測試

前言...

上網被彩色IR毒到

去買了一個濾鏡(MASSA 紅外線濾鏡67mm 紅外線IR 720nm IR720)


第一次拍,完全沒有設定,裝上濾鏡就在全自動模式猛按快門.XD
紅通通的說...
掛上濾鏡後,啥也看不到,觀景窗完全黑的,無法構圖所以只好盲拍嚕!
但是神奇的是....開LiveView(LV)看得到.
意思說,我不想拆裝拆裝濾鏡就要靠LV構圖嚕....

好!根據攻略.阿!是根據文獻啦...要設定白平衡,哈!白平衡是啥,有黑平衡嗎?...

白平衡失敗一

曝光間超乎想像,竟然10秒還會失敗,只好一步一步增加時間
可是一直都顯示No Good!好傷心啊!
白平衡失敗二

疑似成功白平衡(RAW檔)

把棕色的那張,對樹葉最白處做自訂白平衡
然後用PS做紅藍色版互換
中間紅紅的是啥...~"~下回分解...
咦!這算成功嗎?




2010年6月29日 星期二

[程式][BCB] [Linker Fatal Error] {解決方案總論}

[Linker Fatal Error] {解決方案}

這幾天因為接觸GifImage 2.2 and BCB5 BCB6
看到網路上有人提出網路上的問題(如下)想一個解決方案,跟大家分享。
http://www.delphigroups.info/3/6/143309.html

2004-07-11 11:39:21 PM
cppbuilder80
Trying to embedd the TGIFImage V2.2 in BCB5 in a simple display-GIF
worked fine.
But when trying to compile the examplesfor some (e.g. gifexplore.exe)
I get a fatal error: Unable to open file 'DRAGDROPC4.LIB'.
What is this file and where can I get it?
Thanks a lot,
MR



關於網路上抓到的BCB程式
因為(以下三種可能)
  1. 版本差異(VERSION) EX. BCB3 BCB4 BCB5 BCB6 BCB2010
  2. 引用的函式庫(LIB. )差異 EX. SPARELIBS 或 LIBRARIES
  3. PACKAGES的內容差異 EX. package1.bpi 自訂的OOXX.bpi
都很容易有[Linker Error] 或 [Linker Fatal Error] 之類的問題

EX:
[Linker Error] Error processing module D:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\SMCMPNTC6.LIB

or
[Linker Fatal Error] Fatal: Unable to open file 'IP4000V6.LIB'

or
[fatal error]: Unable to open file 'DRAGDROPC4.LIB'

or
Unable to open file OOXX123.bpi ??!!.bpi

總是有找不到的問題

那...

(1)如果你要編譯的專案Project有用到 "OOXX.LIB" 這個函式庫的話,那你就必須先取得這個檔案,然後再用 Project Manager 把這個檔案加入到你的專案裡面,才能夠順利的編譯.
(2)如果你要編譯的專案並沒有用到 "OOXX.LIB" 這個函式庫的話,那你就可以先利用某個文字編輯器把專案檔案 *.bpr 給打開,然後搜尋關鍵字「OOXX.LIB」,找到之後把它刪掉,存檔之後重新開BCB並載入這個專案, 重新編譯看看是否可行?


如果你想要編譯的專案是別人寫好的範例專案,
在他的 BCB 開發環境中已經預設要連結 "OOXX.LIB" 這個函式庫,
但你的 BCB 開發環境中並沒有這個檔案,才會造成這種錯誤,
因此建議你先照 (2) 中的方法試試,或許就沒有問題了.

同理:
要拿掉沒有用到的*.lib *.bpr的連結
用文字編輯器把專案檔案 *.bpr 打開
搜尋你[Linker Fatal Error]的*.lib *.bpr
找到後刪掉,存檔重開BCB編譯看看

神奇的事....
編譯過就了.....


注意事項:

1. 要刪或加入的是 .bpr 還是 .lib EX. 自訂的*.lib *.bpr
2. 相關搜尋路徑,是否正確 EX. ..\..\gifimage.obj 要換成 C:\GifImage\gifimage.obj
3. 記得 using (即使是 BCB) EX. 宣告 或 引用
4. 注意你宣告或引用的是[重新編譯]還是[參考]


本文內容參考:

2010年6月4日 星期五

Google Chart API Tools 彙整





Google Chart API Tools 彙整

本文內容皆由網路收集,及整理與練習實做

每部分皆附上出處的網站網址,如有侵權請留言.謝謝



[1]Google 提供


Google Chart Tools - Google Code

- [ 翻譯此頁 ]
Provides several tools for making data more comprehensible. Special URLs can be used to embed graph and chart images in users'' own web pages.
code.google.com/apis/charttools/ - 頁庫存檔 - 類似內容


[2]參考資源(1)

Google Chart API 中文版- 开发者指南

- [ 轉為繁體網頁 ]
Google Chart API 参考中文版,提供强大的在线图表功能,生成的图表可直接以图片形式嵌入您的网页。调用方服务器无需支持动态语言。
labs.cloudream.name/google/chart/api.html

內含大量 簡體中文 資料

介紹詳盡 若不排斥 可做為參考



[3]Google Chart API
  1. 可以動態產生圖表免費使用URL網址即可呈現Google Chart API 為每個請求回傳一個PNG 格式圖片。目前提供:折線圖、柱狀圖、餅圖、維恩圖、散點圖。 (還有不可思議圖....)可以設定圖表尺寸、顏色和圖例!
  2. Hello|World範例如網址:
可以看到如下圖表

展示範例



[4]使用注意事項:
  1. API使用URL回傳圖片
  2. 每天請求圖片的次數沒有限制,但Google保留拒絕濫用請求的權利。 如果您每天的請求次數大於250,000次,請將預計請求次數告知:chart-api-notifications@google.com。
  3. Image Charts (Google Chart API) Data Size Limit Up to 2K characters in a GET request; up to 16K characters in a POST request. 翻譯的意義:用GET網址能使用的字元是2K. 用POST是無限.
  4. Interactive Charts (Google Visualization API) Data Size Limit No limit.
  5. IE對URL也有長度限制的問題。HTTP協議規範也沒有對URL長度進行限制。這個限制是特定的瀏覽器及服務器對它的限制。IE對URL長度的限制是2083字節(2K+35)。對於其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於操作系統的支持。
  6. 使用中文需要轉換文字













[5]中文的參考範例:
http://chart.apis.google.com/chart?cht=p3&chd=t:11,89&chs=320x120&chl=%E7%94%B7|%E5%A5%B3

顯示的圖表如下:



說明:
http://chart.apis.google.com/chart? 是 google chart api 程式,
參數的部分:
  1. cht=p3 是指 chart type 是 pie chart 3d. 選擇圖片類型,如現在是立體圓餅圖
  2. chd=t:51,49 是指 chart data , 資料用逗號隔開. 各項資料的比例,注意順序要與chl對應,以 , 分隔
  3. chs=320x120 是指 chart size , 也就是 320 * 120. 圖片大小,Google提供支援到300000畫素,可以自訂為1000*300,750*400,600*500等等,注意若文字過長被圖片切掉可以透過把圖調扁來讓他顯示
  4. chl=%E7%94%B7|%E5%A5%B3 是指 pie chart label, 用 | 隔開, 各項資料的名稱,以 | 分隔.其中比較需要讓大家理解的是 %E7%94%B7 是 utf-8 編碼的 "男", 另外就是 "女".
  5. 這樣的結果就會繪製出來上面的圖表了, 而且是即時繪製出來的哦,

假設調整一下多加一個不明的資料, 如下:
http://chart.apis.google.com/chart?
cht=p3&chd=t:19,78,3&chs=320x120&chl=%E7%94%B7|%E5%A5%B3|%E4%B8%8D%E6%98%8E


繪出結果如下:


改一下圖表型態, 可以變為長條圖:

http://chart.apis.google.com/chart?
ht=bvs&chd=t:49,48,3&chs=320x120&chl=%E7%94%B7%7C%E5%A5%B3%7C%E4%B8%8D%E6%98%8E
如下:
根據本部分參考網站(1.)提醒要注意地方:
"在繪製 pie chart 時,有可能因為 chart size 的關係,導致 label 會沒地方繪製出來."

提出的優點:
"請大家多多利用囉.尤其是不用撰寫一行程式,只要會組合 url 的參數,就可以取得的圖表工具, 真的是方便又好用咧."

本部分參考資料:



[6] chart type 可用圖表類型

本部分列出了所有可用的圖表類型與谷歌圖的API chart type 。


Bar Charts長條圖 (方向參數:bhs, bvs, bhg, bvg,bvo)
Bar ChartBar ChartBar ChartBar ChartVertical overlapping bar chart


Box Charts箱型圖(股票圖)
Box chart


Candlestick Charts蠟燭台圖(股票圖)
Candlestick chart


Compound Charts混合圖
Compound ChartsLine chart with one orange line and four financial markers.


Dynamic Icons 動態圖標/標記圖(chem)
Same dynamic icon marker as standalone image. Large bubble with text only.


Formulas 方程式(tx)



Google-O-Meter
Charts
谷歌-O型電表圖/度量表圖/儀表圖(gom)

Google-o-meter with rainbow coloring


GraphViz
Charts (Experimental)
樹與節點圖/圖形化關係圖(gv)

dot chart


Line Charts折線圖 (lc, ls, lxy)
Chart with line in yellow Sparkline chart in blue


Map Charts地圖/著色地圖 (t)
Map of Africa


Pie Charts圓餅圖 (p, p3, pc)



QR Codes二維條碼(全名是Quick Response Code,快速反應的二維條碼)
(qr)




Radar Charts雷達圖/多構面綜合指標圖 (r, rs)



Scatter Charts泡泡圖/散佈圖 (s)



Venn Charts 偉恩圖/文氏圖/貝氏集合圖(v)



本部分參考資料:
  1. Google Chart Tools / Image Charts (aka Chart API)
  2. Google Chart API 參考中文版
翻譯: Cloudream英文版版權歸Google ,轉載此中文版必須以鏈接形式註明原文地址、譯者信 息及本聲明。API參考:http://labs.cloudream.name/google/chart/api.html常見問題: http://labs.cloudream.name/google/chart/faq.html



[7]不可思議圖....




本部分參考資料:

  1. Chart Feature List




[8]Live Chart Playground 線上Chart圖表產生器

說明:

該網址提供一種快速和容易的方法來測試您的圖表URL網址。您可以將網址貼到URL文字框中,編輯參數。圖表和兩個文字框中鍵入時會立即更新。

提示:
  1. 換行時沒有縮排就會自動當成“&”串接網址。
  2. 換行縮排會使用“|”串接網址。
  3. 點擊 "Reformat Parameters" “格式化參數”會自動整理縮排和格式參數,以便於編輯。
  4. 參數都自動完成對映字串(chxt)及參數合理的對上名稱(“圖表標題”),作為你的圖表類型。
  5. 如果使用特殊字符、正體中文或繁體中文在您的標籤文字中(如文字+符號),你必須參考 [4]使用注意事項。

線上Chart圖表產生器
http://code.google.com/intl/zh-TW/apis/chart/docs/chart_playground.html

本部分參考資料:



[9]Formulas 方程式產生使用Chart API和Google Docs

http://docs.google.com/

1.開啟Google Docs
2.產生新文件
3.insert(插入)
4.Equation(方程式)


5.編輯(點選你想要的並編輯)
6.在即時產生的方程式圖片上按右鍵.你可以另存或取得圖片網址
7.網址可以貼到部落格上

例:
https://www.google.com/chart?cht=tx&chf=bg,s,FFFFFF00&chco=000000&chl=%5Csum_%7B5%7D%5E%7B20%7D%7B4*6%5Csqrt%5B3%5D%7B8%7D%20%7D%20%5CDelta%20%5Ctheta%20

本部分參考資料:
  1. http://docs.google.com/

  2. 使用Google Chart API繪製方程式
  3. 自己


評估xxx函式逾時,且需以不安全的方法中止。這可能使目標處理序損毀。

評估xxx函式逾時,且需以不安全的方法中止。這可能使目標處理序損毀。 我選擇直接停用 [啟用屬性評估及其他隱含函式呼叫] --------------------------- Microsoft Visual Studio -------------------...