值得大家研究一下的问题? (100分)

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

whbsuper

Unregistered / Unconfirmed
GUEST, unregistred user!
最近本人遇到一个问题:
已知:一个红色的曲线圆(可能有凹凸)真包含于绿色的矩形中,红色曲线圆中某点P坐标为(x,y),点坐标的颜色可用Getpixel(x,y)表示
求:红色曲线圆的最小横坐标,最大横坐标,最小纵坐标,最大纵坐标(坐标系对应于是电脑上的二维坐标系,即(0,0)从左上角开始)
(实际意图是想实现像PhotoShop中的魔术棒效果:点取图中某点后,能选取出跟该点颜色相同的闭合区域)
(要求从P点出发,不能从左到右扫描,不然如果绿色的矩形再真包含于一个红的区域内,就会出错)
 
关注
挨个判断每个点的的图像
先从一点向左判断,然后再向上,不是的话向右再向上,不是再向右,右不是向下,下不是
向左,一直回到最左边的出发点
:whbsuper
我对图像不熟,请问单色的自然好处理,对于彩色的怎么样去匹配,一般的匹配标准是什么
也就是说,两种颜色差多少才算不同色?同图不同对比度是否要改变标准才行
怎么去根据图的什么参量(对比度?)来确定标准?

共同探讨,强烈关注
 
你能否说的具体点的,对于你的回答太模糊,你说的回到最左边的出发点是不可能的,因为P点的坐标是用户鼠标点在屏幕上的位置,并不一定是最左边,具体位置随机的
 
采取深度优先的算法来搜索。类似于求最短路径
先把每个像素做为一个地物来处理,每个像素有一个唯一的ID
定义一个像素类TGeoPix

TGeoPix = class(TObject)
nX,nY : integer; //坐标
neiList : TList ;//相邻的八个像素的ID
bCheck :Boolean ; //是否检测过的标记
gcolor : TColor ; //该像素的颜色
end;

ObjList : TList ; // 里存储所有的像素地物 TGeoPix
selectedList : TList ;// 匹配上的像素的List
selectedObj : TGeoPix ; //鼠标选中的像素
点取图中某点后就能根据Cursor的坐标来确定哪个GeoPix被选中,根据选中的GeoPix的 neiList 里的Pix
的 gcolor 来做匹配,先把bCheck:=True ,如果能匹配上,就加到selectedList 里
(采取深度优先的算法来搜索,用递归,参考Dijkstra的最短路径算法)

最后selectedList里就是选中的像素

注:
如果要优化,在 neiList 里存储指针来代替ID
 
感觉有点道理,最后selectedList里好像保存的是所有同种颜色的所有像素点,并且用objList里保存所有的像素TGeoPix似乎有点麻烦,而且这样求出来的是所有点而非最小坐标、最大坐标,如果还想算出最小坐标、最大坐标还得对selectedlist里的像素坐标再过滤(当然这点过滤工作不是很多),但如果我想绘出该红色曲线区域的边沿线来,好像又很麻烦了,请上面的高手能否给我个具体点的代码,这里我可以再加500分。(实现意国:实现Photoshop里的魔术棒点取选区的效果,选区边线用虚线表示一下)
先给你这100,后面的能给出具体代码再给500分
 
后退
顶部