發表文章

目前顯示的是 7月, 2013的文章

一維陣列與二維陣列轉換

這是我今天不經意的寫出一個謬誤程式,我希望將一個用一維陣列儲存的100x100小圖片,放大2倍儲存到另一個二維陣列,放大方式就是將一個像素自我複製變成4個像素。   int FrameHeight = 480;   int FrameWidth = 640;   for(int h=0; h   {     for(int w=0; w     {       int idx1 = h*FrameWidth/4+w/2;       int idx2 = h/2*FrameWidth/2+w/2;       if (idx1 != idx2)       {         cerr << "(" << h <<  "," << w<< ") idx1=" << idx2 << " idx2=" << idx2 << endl;       }   } } idx1 = h*FrameWidth/4+w/2 idx2 = h/2*FrameWidth/2+w/2 idx1是對h*FrameWidth除以四 和 idx2先對h/2之後再除以2應該是一樣的吧!? 這個兩個運算看似數學上是相等且合理的,實際上卻是大大的不同! 實際上這兩個運算,因為使用了C/C++的整數運算特性,應表示成 idx1 = floor(h*FrameWidth / 4.0) + floor(w/2.0) idx2 = floor(floor(h / 2.0) * FrameWidth / 4.0) + floor(w/2.0) 當我們帶入 h, w為101, 100的時候 idx1 = 16210 = 16160 + 50 = floor(101 * 640 / 4.0) + ceil(100 / 2.0) idx2 = 16050 = 16000 + 50 = floor( 50 * 640 / 2.0)  + ceil(100 / 2.0) = floor( floor(101/2.0) * 640 / 2.0)  + floor(100

命令提示字元跑一連串的實驗

最近都在用command line幫忙跑實驗,不過總是會有些功能無法幫上忙。 因為是資工所,所以在遭遇不確定是否有提供某項的功能時,可善用熟悉的C/C++來解決它, 像是實驗用程式會在螢幕上輸出數據資料,因為每個實驗程式會輸出的數據不太一樣, 就可以寫一個簡單的parser去汲取所需資料,再用cout/cerr/printf輸出到螢幕上, 再用Command line的導向功能(>與>>或是2>,2>>)決定這些資料是否要輸出到檔案, 最近寫的一個Command line檔範例: SET BGRPATH=Images\ SET EXEPATH=GreenMSEOrderParser.exe for %%r in (3 4 5 6 7 8 9) do ( for %%v in ("%BGRPATH%*.bgr") do ( del /f GMSEOrder_%%~nv_R%%r.txt for %%t in (1 2 3 4 5 6 7 8 9) do ( set /p=%%~nv_T%%t   > GMSEOrder_%%~nv_R%%r.txt %EXEPATH% %%~nv_T%%t\*_R%%r*.mse >> GMSEOrder_%%~nv_R%%r.txt ) ) )

命令提字元的for迴圈從檔案列表處理資料

dir /B *.bmp > list.txt for /F  %%t in (list.txt) do (   DepthToYUV.exe %%t output.yuv ) pause