如保计算图片像素值的标准差?(200分)

  • 主题发起人 whitefang
  • 开始时间
W

whitefang

Unregistered / Unconfirmed
GUEST, unregistred user!
由于工作需要,需要将一图片转换成灰度级,然后计算每一个点的像素的颜色值的标准差

在实现过程中,我发现计算数度很慢,以下步骤就花了我一个小时:
打开图片文件
读取像素值
将像素值转换为灰度级
像素值存储到数据库中

速度太慢,希望各位帮个忙.帮我解决一下.
 
你用scanline试试,会快很多的!
 
将像素值转换为灰度级------是要得到灰度图吗?
 
时间消耗在什么地方?
猜测是不是消耗在: 像素值存储到数据库中
 
procedure Grayscale(const Bitmap:TBitmap);
var
X: Integer;
Y: Integer;
PRGB: pRGBTriple;
Gray: Byte;
begin
for Y := 0 to (Bitmap.Height - 1) do
begin
PRGB := Bitmap.ScanLine[Y];
for X := 0 to (Bitmap.Width - 1) do
begin
Gray := Trunc(0.3 * PRGB^.rgbtRed + 0.59 * PRGB^.rgbtGreen + 0.11 * PRGB^.rgbtBlue);//如要更快,见下面的语句
PRGB^.rgbtRed:=Gray;
PRGB^.rgbtGreen:=Gray;
PRGB^.rgbtBlue:=Gray;
Inc(PRGB);
end;
end;
end;
有2种更快一些的语句:
1、Gray := (30 * Red + 59 * Green + 11 * Blue) div 100;
2、Gray := (77 * Red + 151 * Green + 28 * Blue) shr 8;//会有一些误差
 
顶部