(结贴率100%)如何获取这个图片上 黑白交界处的 XY坐标
(结贴率100%)怎么获取这个图片上 黑白交界处的 XY坐标?
比如起点是图中蓝色的地方。
然后我要获取一段(长度不定的)黑白交接的坐标,图中我已经用红色线标记出来了。
请问如何用代码实现?获取红色这个路线的所有坐标?
求代码,或思路,谢谢。``````
UP有分 结贴率100%
Image1.canvas.Pixels[1,1] 这样就是获取1,1坐标的颜色是 黑色
------解决方案--------------------
只能給你UP
------解决方案--------------------
这是传奇,挖矿地图。。。
思路不是这样的,不知道你要这段距离做什么用
传奇不是求出所有可走图标才决定人物路线的,而是根据人物的方向,求出下一个坐标,判断是否可到达。
传奇中右上图的小地图就是黑白图,它就是用颜色来判断的,下一个坐标是黑色,那么就不可行走,白色就允许走
------解决方案--------------------
迷宫的一种解法 就是贴墙走。
------解决方案--------------------
有个笨办法,一个点一个点的取色,如果相领两点颜色不同(黑和白相邻),就存到一个数组中,不知道是否可行
------解决方案--------------------
看看 图像学的 路径算法
估计也没人给你贴源码的
------解决方案--------------------
建边缘检测器。。
轮廓处理的代码。
具体的你看下数字图像处理的书。 《Delphi数字图像处理及高级应用》
var
b0, b1: Tbitmap;
i, j: Integer;
p1, p2, p3, p4: pbyteArray;
begin
b0 := Tbitmap.Create;
b1 := Tbitmap.Create;
b0.Assign(Image1.Picture.Bitmap);
b1.Assign(Image1.Picture.Bitmap);
b0.PixelFormat := pf24bit;
b1.PixelFormat := pf24bit;
for i := 1 to b0.Height - 2 do
begin
p1 := b0.ScanLine[i - 1];
p2 := b0.ScanLine[i];
p3 := b0.ScanLine[i + 1];
p4 := b1.ScanLine[i];
for j := 1 to b0.Width - 2 do
begin
if (p2[3 * j + 2] = 0) and (p2[3 * j + 1] = 0) and (p2[3 * j] = 0) then
begin
if ((p2[3 * (j - 1) + 2] = 0) and (p2[3 * (j - 1) + 1] = 0) and
(p2[3 * (j - 1)] = 0)) and
((p2[3 * (j + 1) + 2] = 0) and (p2[3 * (j + 1) + 1] = 0) and
(p2[3 * (j + 1)] = 0)) and
((p1[3 * (j + 1) + 2] = 0) and (p1[3 * (j + 1) + 1] = 0) and
(p1[3 * (j + 1)] = 0)) and
((p1[3 * (j) + 2] = 0) and (p1[3 * (j) + 1] = 0) and (p1[3 * (j)]
= 0)) and
((p1[3 * (j - 1) + 2] = 0) and (p1[3 * (j - 1) + 1] = 0) and
(p1[3 * (j - 1)] = 0)) and
((p3[3 * (j - 1) + 2] = 0) and (p3[3 * (j - 1) + 1] = 0) and
(p3[3 * (j - 1)] = 0)) and
((p3[3 * (j) + 2] = 0) and (p3[3 * (j) + 1] = 0) and (p3[3 * (j)]
= 0)) and
((p3[3 * (j + 1) + 2] = 0) and (p3[3 * (j + 1) + 1] = 0) and
(p3[3 * (j + 1)] = 0)) then
begin
p4[3 * j + 2] := 255;
p4[3 * j + 1] := 255;
p4[3 * j] := 255;
end;
end;
end;
Image1.Picture.Bitmap.Assign(b1);
end;
b1.Free;
b0.Free;
比如起点是图中蓝色的地方。
然后我要获取一段(长度不定的)黑白交接的坐标,图中我已经用红色线标记出来了。
请问如何用代码实现?获取红色这个路线的所有坐标?
求代码,或思路,谢谢。``````
UP有分 结贴率100%
Image1.canvas.Pixels[1,1] 这样就是获取1,1坐标的颜色是 黑色
------解决方案--------------------
只能給你UP
------解决方案--------------------
这是传奇,挖矿地图。。。
思路不是这样的,不知道你要这段距离做什么用
传奇不是求出所有可走图标才决定人物路线的,而是根据人物的方向,求出下一个坐标,判断是否可到达。
传奇中右上图的小地图就是黑白图,它就是用颜色来判断的,下一个坐标是黑色,那么就不可行走,白色就允许走
------解决方案--------------------
迷宫的一种解法 就是贴墙走。
------解决方案--------------------
有个笨办法,一个点一个点的取色,如果相领两点颜色不同(黑和白相邻),就存到一个数组中,不知道是否可行
------解决方案--------------------
看看 图像学的 路径算法
估计也没人给你贴源码的
------解决方案--------------------
建边缘检测器。。
轮廓处理的代码。
具体的你看下数字图像处理的书。 《Delphi数字图像处理及高级应用》
var
b0, b1: Tbitmap;
i, j: Integer;
p1, p2, p3, p4: pbyteArray;
begin
b0 := Tbitmap.Create;
b1 := Tbitmap.Create;
b0.Assign(Image1.Picture.Bitmap);
b1.Assign(Image1.Picture.Bitmap);
b0.PixelFormat := pf24bit;
b1.PixelFormat := pf24bit;
for i := 1 to b0.Height - 2 do
begin
p1 := b0.ScanLine[i - 1];
p2 := b0.ScanLine[i];
p3 := b0.ScanLine[i + 1];
p4 := b1.ScanLine[i];
for j := 1 to b0.Width - 2 do
begin
if (p2[3 * j + 2] = 0) and (p2[3 * j + 1] = 0) and (p2[3 * j] = 0) then
begin
if ((p2[3 * (j - 1) + 2] = 0) and (p2[3 * (j - 1) + 1] = 0) and
(p2[3 * (j - 1)] = 0)) and
((p2[3 * (j + 1) + 2] = 0) and (p2[3 * (j + 1) + 1] = 0) and
(p2[3 * (j + 1)] = 0)) and
((p1[3 * (j + 1) + 2] = 0) and (p1[3 * (j + 1) + 1] = 0) and
(p1[3 * (j + 1)] = 0)) and
((p1[3 * (j) + 2] = 0) and (p1[3 * (j) + 1] = 0) and (p1[3 * (j)]
= 0)) and
((p1[3 * (j - 1) + 2] = 0) and (p1[3 * (j - 1) + 1] = 0) and
(p1[3 * (j - 1)] = 0)) and
((p3[3 * (j - 1) + 2] = 0) and (p3[3 * (j - 1) + 1] = 0) and
(p3[3 * (j - 1)] = 0)) and
((p3[3 * (j) + 2] = 0) and (p3[3 * (j) + 1] = 0) and (p3[3 * (j)]
= 0)) and
((p3[3 * (j + 1) + 2] = 0) and (p3[3 * (j + 1) + 1] = 0) and
(p3[3 * (j + 1)] = 0)) then
begin
p4[3 * j + 2] := 255;
p4[3 * j + 1] := 255;
p4[3 * j] := 255;
end;
end;
end;
Image1.Picture.Bitmap.Assign(b1);
end;
b1.Free;
b0.Free;