我目前正在閱讀17張圖片(24位,1200 x 1600)。讀17張圖像花了我大約0.078秒但是,我想將這個5760000大小的內存塊轉換爲192000的黑白圖像大小來做我的laplacian edge_detection。現在,我使用下面的方法:提高程序速度:矢量速度,內存塊速度
images.resize(rows * cols);
images.reserve(rows * cols);
for(int z = 0; z < rows * cols; z ++){
pix.blue = (int) *(pChar + z * 3);
pix.green = (int) *(pChar + z * 3 + 1);
pix.red = (int) *(pChar + z * 3 + 2);
pix.black_white = pix.blue * .11 + pix.green * .59 + pix.red *.3;
images.at(z).black_white = pix.blue * .11 + pix.green * .59 + pix.red *.3;
}
然而,這讀取PCHAR內存塊和寫入的192萬矢量大小花費我的2.262秒總時間,讀取17倍的圖像處理。有沒有更快的方法可以處理這個問題?
我曾嘗試使用以下不同的代碼嘗試,但在pChar2不斷告訴我,它在調試模式VS2010一個badptr:(data_grey,PCHAR,pChar2變量是一個無符號的char *)
pChar = (unsigned char*) malloc (sizeof(char)*3*rows*cols);
pChar2 = (unsigned char*) malloc (sizeof(char) * rows * cols);
fread(pChar, sizeof(char), 3*rows*cols, bmpInput);
images.at(i).data = pChar;
for(int z = 0; z < rows * cols; z ++){
pix.blue = (int) *(pChar + z * 3);
pix.green = (int) *(pChar + z * 3 + 1);
pix.red = (int) *(pChar + z * 3 + 2);
pix.black_white = pix.blue * .11 + pix.green * .59 + pix.red *.3;
pChar2 += (unsigned char) pix.black_white;
}
images.at(i).data_grey = pChar2;
我的想法是,我可能以不正確的方式寫入pChar2內存塊。但這第二種方法要快得多,所以我想知道我應該如何解決它。如果我爲images.at(i).data_grey獲得了一塊黑白內存塊,那將是理想的選擇。我主要是想這樣做,因爲它比矢量快得多,但是在基於矢量的代碼中,我做了一些錯誤,使得它比較慢? (我個人覺得載體更容易使用,但如果我需要的速度實在太差了,所以我會處理與存儲塊的工作,如果它應該是更快)
是的,我的意圖是。 Thxs – user2427671