图象识别 (100分)

  • 主题发起人 主题发起人 ljbXS
  • 开始时间 开始时间
L

ljbXS

Unregistered / Unconfirmed
GUEST, unregistred user!
|——————————————————————|
| 。 。 。 。 |
|——————————————————————|
| 。 。 。 。 。 |
|——————————————————————|
我有这么一副图,在一个框内有若干个黑点,我怎么样才能测出这些点的位置和大小,
这些点大有小。位置可以是在窗口或图象的坐标。黑点的颜色有深浅,能知道它的数值。
图是随机的,第次黑点的位置不同,边框也是黑的.

 
关注:
不知这样行不行:
procedure TForm1.Button1Click(Sender: TObject);
var
R,G,B:Byte;
C:TColor;
I,J:Integer;
begin
for I:=0 to Image1.Picture.Width-1 do
begin
for J:=0 to Image1.Picture.Height-1 do
begin
C:=Image1.Picture.Bitmap.Canvas.Pixels[I,J];
R:=GetRValue(C);
G:=GetGValue(C);
B:=GetBValue(C);
if (通过判断C或者RGB的值来判断) then
begin
// 保存数据
end;
end;
end;
end;
 
如果黑点和背景相差很大,可以取一个值,大于它的算黑点,小于它的算背景。
然后处理起来就方便了
 
to zhihuali,
你的方法好像不行,“这些点大有小”,不一定就是一个像素
我觉得应该把这些点看成一些小的图形块才行
 
可以先边缘检测,然后阈值分割(自适应或固定阈值),然后as their advice
 
对图形进行分割,针对分割的块作分析.若与底色有差,则对该分割块继续分割
 
我要源程序[:)]
 
好象做游戏的 [:)]
 
不做游戏,是为朋友做的,每个点代表一个数字
 
to ljbXS:
>>我要源程序[:)]
别人已经提供方法供你参考了,还不行?拿出money 干脆叫别人写一个好了。
 
先灰度。。
 
找些图象处理方面的书籍看看,再找一些公共程序,这些程序应该都有标准版本的。
 
你既然已经知道黑点的值了,先二值化,区分背景和图象,在用一个轮廓识别,得到边缘轮廓的数值。大小我想你用轮廓就可以区分开了,位置可以根据记录的轮廓值的坐标来确定。你是想要近似的,还是要确切一点的。确切一点的可以用几何重心来表示
 
先二值化,阀值可以用直方图两个高点的中间点 再识别就很容易了(例如可以做一下腐蚀)
 
扩张与收缩
 
多人接受答案了。
 
后退
顶部