我嘗試編寫一段代碼,該代碼需要一個正方形圖像並應用銳化內核。查找數字是否在範圍內的最快方法
我確實設法在我的任務中取得成功,但我對我的程序運行時間感到失望。模糊圖像和銳化它需要的時間(500x500)大約需要16毫秒,我想要低於這個時間,我使用了callgrind
和cachegrind
,我確實發現我的緩存未命中率很低(約3%),所以我試圖縮小這個問題我注意到,每次我在一個像素上應用內核時,我會問任何一個通道是否在[0,255]的範圍內。我想知道是否有計算,如果數量在範圍內,到目前爲止我用下面的宏的快捷方式:
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b))
我的像素結構:
typedef struct {
unsigned char red;
unsigned char green;
unsigned char blue;
} pixel;
和我的計算:
//p is a struct of pixel.
p.red = min(max(sumRed, 0), 255);
p.green = min(max(sumGreen, 0), 255);
p.blue = min(max(sumBlue, 0), 255);
'sumRed'的值範圍是什麼?它的類型是什麼? – chux
爲什麼您需要詢問數值是否在0-255的範圍內?如果這是一個8位的圖像,它應該是一個給定的不是? –
你希望用max(sumRed,0)'來實現什麼?這些是'無符號'值。 –