2012-01-03 38 views
0

我想提取我提取的字符位圖(.bmp文件)爲某種矩陣,可以在C++中處理然後饋入人造神經網絡,例如網絡將需要72個輸入 - 每個作爲尺寸爲6 x 12的二值化圖片的像素。如何將位圖轉換爲可在C++(ANN)中處理的「矩陣」?

例如:我有一個大小爲二十一點的位圖,比方說40 x 80.我想從中找出一個結構將具有6×12的尺寸,它將由我的縮放位圖組成。所以我需要一個位圖庫,可以讓我縮放bmps,然後將它們送入ANN。 (正如你們中的一些人已經說過的那樣,它們已經被存儲爲一個這樣的矩陣,所以不需要轉換)

我可以在這裏使用什麼?

+0

那麼,究竟是什麼問題了嗎?打開文件?要讀取數據?將數據轉換爲您的ANN庫期望的格式?請更精確。請注意,如果您有多個問題,則可能會打開多個問題。這樣做是爲了使每個問題的實際問題的數量儘可能接近1。 – moooeeeep 2012-01-03 22:17:41

+0

@moooeeeep我已更新我的問題。請看看它是否更好。 – Patryk 2012-01-03 22:28:44

+0

X中每隔6個像素,Y中每隔3個像素。不夠優雅,但可以作爲第一遍,直到找到更好的低分辨率解決方案。 – 2012-01-03 22:46:28

回答

2

看來任何圖像處理庫都可以滿足您的需求。所以,我的建議是使用一個儘可能簡單的庫來集成到你的構建過程中。 在這種情況下,CImg庫對我們來說非常簡單,因爲它由一個簡單的.h文件組成。

關於你的需要,一個可能的實現將是

#include "CImg.h" 
using namespace cimg_library; 

int main(int argc,char **argv) 
{ 
    CImg<unsigned char> image("img/logo.bmp"); 

    //Simple resize with nearest neighbour interpolation 
    //image = image.resize(64, 64); 

    //If you want to specify the interpolation type 
    image = image.resize(64, 64, -100, -100, 4);//The last param specifies the interpolation type 
    //\param interpolation_type Method of interpolation : 
    // -1 = no interpolation : raw memory resizing. 
    // - 0 = no interpolation : additional space is filled according to \p border_condition. 
    // - 1 = nearest-neighbor interpolation. 
    // - 2 = moving average interpolation. 
    // - 3 = linear interpolation. 
    // - 4 = grid interpolation. 
    // - 5 = bicubic interpolation. 
    // - 6 = lanczos interpolation. 

    CImgDisplay main_disp(image,"Image resized"); 

    //This last part of code is not usfeul for you, it is only used to display the resized image 
    while (!main_disp.is_closed()) 
    main_disp.wait(); 
    return 0; 
} 
+0

嘿,非常感謝這個lib,但我仍然無法運行它。我繼續得到未處理的異常:'+ \t \t _message \t 0x00322ba8「[instance(0,0,0,00000000,non-shared)] CImg :: load_bmp():無效的BMP文件'嘗試。 BMP」。」 \t char [16384] '和這[圖片鏈接](http://img15.imageshack.us/img15/3940/61319346.png) 我把bmp放在工作目錄中,我把其他圖像放在其他庫上。 – Patryk 2012-01-03 23:40:27

+0

好吧,我修好了 - 問題是與圖書館 - 它不能與8位位圖合作:/我希望他們很快就會修復它。 – Patryk 2012-01-04 00:01:12

0

位圖文件格式(請參閱the specs)已經將位圖存儲爲矩陣,或者更精確地說是一個像素數組,它可以按行(或列但不重要)劃分爲二維數組。

因此,您只需讀取標題並獲取圖像大小,然後讀取包裝爲struct(無填充,如解釋here)的數組中的數據。

這樣你就可以得到你的矩陣,然後你可以把它包裝在一個類中來存儲寬度和高度屬性,甚至可以給個人風味矩陣的構造函數提供數組。

0

使用某種類型的bmp lib來訪問數據(依賴於平臺)。這通常會讓您將bmp作爲平面陣列。取平面數組並將每個值插入到矩陣結構中,或直接將其傳遞到NN代碼中。沒有更多信息,不能爲您提供更多的信息。