0

我想在矩形的每个左右进行迭代并使用 line 连接它并选择最短的线,如(左图)this 。然后我想得到与轮廓线相交的位置(右图。有人知道解决方案吗?

4

1 回答 1

0
 //Line Iterator = get coordinate on line 
   LineIterator it(drawing, titik_kotak[0], titik_kotak[1],8);  //left side
   LineIterator it2(drawing, titik_kotak[2], titik_kotak[3],8); //right side
   for(int i=0; i<1, i<1 ; i++,++it,++it2)
   {
       sisikiri = it.pos();
       kiri[0]= Point(sisikiri.x, sisikiri.y);
       printf("Kiri  Line index[%d] =  [%d,%d]\n", i, sisikiri.x, sisikiri.y);

       sisikanan = it2.pos();
       kanan[0]= Point(sisikanan.x, sisikanan.y);
       printf("Kanan Line index[%d] =  [%d,%d]\n", i, sisikanan.x, sisikanan.y);
       //make diagonal line left to right 
       //line(drawing, kiri[i], kanan[i], Scalar(123,0,233),1,8);

       //find intersection between line and kontur
       findLocIntersection(drawing, i,i);
    }


void findLocIntersection(Mat drawing, int m, int n){
LineIterator iterasi(drawing, kiri[m], kanan[n],8);     
for(int b=0; b<iterasi.count; b++,++iterasi)
{
    iter = iterasi.pos();
    gariske[m]= Point(iter.x, iter.y);
    //printf("Garis ke- %d, point ke- %d, loc=  [%d,%d]\n\n\n", m, b, iter.x, iter.y);

    //creat circle on intersection point 
    //255 = putih  Scalar(0,0,255)=Merah
    if(drawing.at<Vec3b>(iter.y, iter.x)[0] == 255 && drawing.at<Vec3b>(iter.y, iter.x)[1] == 255 && drawing.at<Vec3b>(iter.y, iter.x)[2] == 255)
    {
        printf("DOO !!! location kke-%d = [%d,%d]\n", b,iter.x, iter.y);
        circle(drawing,Point(iter.x,iter.y),1,Scalar(0,0,255),1,8);
    }
}
于 2017-05-21T00:21:00.763 回答