2014-02-06 41 views
0

我正在寻找增强现实标记跟踪并在github上找到了一个辉煌的OpenCV示例。iOS中的OpenCV标记跟踪

https://github.com/jorge-r-murillo-c/AR-IOs-marker-detector

我相信我发现,在该标记翻译代码,其寻找

int Marker::hammDistMarker(cv::Mat bits) 
{ 
    int ids[4][5]= 
    { 
    {1,0,0,0,0}, 
    {1,0,1,1,1}, 
    {0,1,0,0,1}, 
    {0,1,1,1,0} 
    }; 

    int dist=0; 

    for (int y=0;y<5;y++) 
    { 
    int minSum=1e5; //hamming distance to each possible word 

    for (int p=0;p<4;p++) 
    { 
     int sum=0; 
     //now, count 
     for (int x=0;x<5;x++) 
     { 
     sum += bits.at<uchar>(y,x) == ids[p][x] ? 0 : 1; 
     } 

     if (minSum>sum) 
     minSum=sum; 
    } 

    //do the and 
    dist += minSum; 
    } 

    return dist; 
} 

然而,这有标记的图片没有相关

enter image description here

我在书中看过这段代码是从哪里来的,但对我来说没有意义。

http://books.google.co.uk/books?id=UjWoIFHcr58C&pg=PT119&lpg=PT119&dq=hammDistMarker&source=bl&ots=S8l0Frrx1A&sig=4m9R7A-UJqk3WnfvOdKWYadZMbQ&hl=en&sa=X&ei=IsfzUpu-Ia6e7Aaq6oDIDg&ved=0CD0Q6AEwAg#v=onepage&q=hammDistMarker&f=false

是否有一个工具,过程,函数,都会使图像中的跟踪数据还是我找错了树?

+0

我使用的是相同的代码。我创建了不同的标记图像,但它们的ID不是旋转不变的。您是否有任何有效标记的来源,或者我如何自己创建新标记? –

回答

1

您有一个名为ids []的矩阵,并且此矩阵具有二进制系统中标记的代码。 如果以二进制读取,矩阵的第一行是{1,0,0,0,0},标记图像显示图像中的第一行是一个正方形白色和四个方形黑色。

下一行有{黑色,白色,白色,白色,黑色} = {0,1,1,1,0},它对应于矩阵中的第四行。

hammDistMarker()函数计算摄像头捕获的图像与ids矩阵中的代码之间的距离,但它计算每行的行数。

例如,如果您删除标记的第一行中的白色方块,将基:

int ids[4][5]= 
    { 
    {0,0,0,0,0}, 
    {1,0,1,1,1}, 
    {0,1,0,0,1}, 
    {0,1,1,1,0} 
    }; 

对不起,我试着上传图片,但我不能。

我希望这些信息对您有所帮助。

如果你愿意,我可以用符号绘制一个标记。

+0

为什么第一行是图像的第一行,第二行是图像的第四行? – Burf2000