cqbaobao大侠,能再帮我一个忙吗?本人感激不尽!!!!!!!!(15分)

  • 主题发起人 主题发起人 踏雪留恨
  • 开始时间 开始时间

踏雪留恨

Unregistered / Unconfirmed
GUEST, unregistred user!
上次你告诉我的算法,结果不太理想,我想改一下,你能再帮帮我,告诉我代码吗?本人将
感激不尽。
我想把每张图上每一点(边上的不算)周围9个点的灰度值相加平均来代替该点的灰度值,
然后再进行两张图对应点的相加平均来作为第三张图对应点的灰度值,我的图好象是24位,
拜托了,我对这方面真的不太懂。
 
高斯模糊算法可以借鉴一下,用的是scanline,即某个点的新的象素值是周围的8个象素点的
平均,你的那个灰度也是一样的,适合于24bit
procedure TMainForm.GaotemplateClick(Sender: TObject);
var
bmp1, bmp2: Tbitmap;
p1, p2, p3, p4: pbytearray;
i, j: integer;
begin
//self.DoubleBuffered := true;
bmp1 := Tbitmap.Create;
bmp2 := Tbitmap.Create;
bmp1.Assign(ChildForm.image1.Picture.Bitmap);
bmp1.PixelFormat := pf24bit;
bmp1.Width := ChildForm.image1.Picture.Graphic.Width;
bmp1.Height := ChildForm.image1.Picture.Graphic.Height;
bmp2.Assign(ChildForm.image1.Picture.Bitmap);
bmp2.PixelFormat := pf24bit;
for j := 1 to bmp1.Height - 2 do
begin
p1 := bmp1.ScanLine[j];
p2 := bmp2.ScanLine[j - 1];
p3 := bmp2.ScanLine[j];
p4 := bmp2.ScanLine[j + 1];
for i := 1 to bmp1.Width - 2 do
begin

p1[3 * i + 2] := (p2[3 * (i - 1) + 2] + 2 * p2[3 * i + 2] +
p2[3
* (i + 1)
+ 2] + 2 * p3[3 * (i - 1) + 2] + 4 * p3[3 * i + 2] + 2
*
p3[3
* (i + 1)
+
2] + p4[3 * (i - 1) + 2] + 2 * p4[3 * i + 2] + p4[3 *
(i +
1) + 2])
shr
4;
p1[3 * i + 1] := (p2[3 * (i - 1) + 1] + 2 * p2[3 * i + 1] +
p2[3
* (i + 1)
+ 1] + 2 * p3[3 * (i - 1) + 1] + 4 * p3[3 * i + 1] + 2
*
p3[3
* (i + 1)
+
1] + p4[3 * (i - 1) + 1] + 2 * p4[3 * i + 1] + p4[3 *
(i +
1) + 1])
shr
4;
p1[3 * i] := (p2[3 * (i - 1)] + 2 * p2[3 * i] + p2[3 * (i +
1)] +
2 * p3[3
* (i - 1)] + 4 * p3[3 * i] + 2 * p3[3 * (i + 1)] + p4[3 *
(i -
1)] + 2 *
p4[3 * i] + p4[3 * (i + 1)]) shr 4;

end;

end;
bmp1.free;
bmp2.free;
 
首先:我也是菜鸟!

然后:同意 huazai,

关键是不知道你的具体需求,如果非要求 9 个点的平均,改一下几个加法的系数即可;

最后:你发给我的图确实是 32 位的,用 ACDSee 查看显示为 16M+ 颜色数
 
我知道huazai是对的,但具体怎么写,我真的不知道,既要先求两张图每一点(边上的点
不算)周围8个点的灰度值相加平均来代替该点的灰度值,然后再进行两张图对应点的相加
平均来作为第三张图对应点的灰度值,这些代码怎么写啊,麻烦你们告诉我,好吗?我最后
只剩下这些分了,都给你们吧,谢谢你们了。
 
我接触DELPHI才不久,所以这有篇有关Scanline属性的文章,我看不懂,希望你们能看一看,
帮我把那些代码写出来,拜托了,我现在想去好好学DELPHI已经是来不及的了,马上要答
辩了。大家就当练习一下吧。
http://www.code-labs.com/article/articleinfo.php?id=366
 
在 huazai 的代码中其它不用变,循环里改成如下即可:
=================================================
p1[3 * i + 2] := (p2[3 * (i - 1) + 2] + p2[3 * i + 2] + p2[3 * (i + 1) + 2] +
p3[3 * (i - 1) + 2] + p3[3 * i + 2] + p3[3 * (i + 1) + 2] +
p4[3 * (i - 1) + 2] + p4[3 * i + 2] + p4[3 * (i + 1) + 2]) div 9;
p1[3 * i + 1] := (p2[3 * (i - 1) + 1] + p2[3 * i + 1] + p2[3 * (i + 1) + 1] +
p3[3 * (i - 1) + 1] + p3[3 * i + 1] + p3[3 * (i + 1) + 1] +
p4[3 * (i - 1) + 1] + p4[3 * i + 1] + p4[3 * (i + 1) + 1]) div 9;
p1[3 * i] := (p2[3 * (i - 1)] + p2[3 * i] + p2[3 * (i + 1)] +
p3[3 * (i - 1)] + p3[3 * i] + p3[3 * (i + 1)] +
p4[3 * (i - 1)] + p4[3 * i] + p4[3 * (i + 1)]) div 9;

说实在的,这样回答问题,我也是第一次:(
 
后退
顶部