图像处理中,提取出目标轮廓之后,如何标记轮廓中的两点呢?用鼠标互动点击吗?
之后如何测量两点间的距离呢?

解决方案 »

  1.   

    不明白LZ什么意思轮廓其实就是点集,你要找两点,当然要有约束条件。比如是直线找两端点,只要找最小X最大X(非垂直),垂直情况找最大Y和最小Y,不就得到了点的坐标?至于距离,使用勾股定理不就出来了?
      

  2.   

    我的做法是学习AutoCAD(请大家不要见笑)的“磁吸”效果。
    1.我定义一个矩形框过滤点集的函数(形参矩形为客户区坐标,在函数内部转成世界坐标),将过滤出的点的索引记入一个临时队列。
    2.为了加速选取,在客户区发现变化和视图缩放后,先用客户区矩形进行过滤;
    3.定义一个捕捉半径(正方形框的半边长)变量;
    4.在OnMouseMove函数中以光标点为中心建立小的过滤矩形框;
    5.调用矩形过滤函数,对客户区矩形过滤出的点集再次过滤,滤出与光标相近的点(如果捕捉半径大的话可能有多个);
    6.计算最近的点(如果捕捉半径小,只滤出一个点,可忽略此步);
    7.将该点从世界坐标转换为客户区坐标;
    8.将该点客户区坐标转换为屏幕坐标;
    9.调用SetCursorPos()函数将光标指向该点(磁吸);
    10.如果想选中该点,左击鼠标对该点做标记;
    11.同理选第二个点,进行测量。要点:
    1.如果嫌麻烦,可以忽略7~9步,不要磁吸效果,也可以选中点,反正都过滤出来了;
    2.如果用磁吸效果,在光标被吸引过程,用一个BOOL变量来标识是否进入磁吸矩形,在矩形内取消再次磁吸功能。否则你的光标就被套牢了,^_^
    3.最好以光标为中心画个磁吸矩形框,一目了然知道会吸住哪个(些)点。
    4.此方法可推广到用鼠标拖一个大矩形框,选中许多点本人也是MFC菜鸟,恳请各位大侠批评指正。
      

  3.   

    看你的需要了,如果你是希望提取后的轮廓中药提取的地方是比较有特点的,比如说在图像最上面或者最下面或者最左,右边,那就可以不用选取了,然后求距离就用sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)),其中x1,y1,x2,y2是特征轮廓点对应得像素坐标,如果不是那些特别的点,就可以使用鼠标选取,利用鼠标点击响应并记录,或者是拖拽然后根据区域再处理找出你要的特征点。如果是要轮廓特征区域的距离,就可以先找区域然后可以取特征区域里面的特征点(比如形心或者质心什么的)。。