iOS中的OpenCV标记跟踪

iOS中的OpenCV标记跟踪,ios,opencv,augmented-reality,Ios,Opencv,Augmented Reality,我正在寻找增强现实标记跟踪,并在github上找到了一个出色的OpenCV示例 我相信我找到了被翻译成它所寻找的标记的代码 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++) {

我正在寻找增强现实标记跟踪,并在github上找到了一个出色的OpenCV示例

我相信我找到了被翻译成它所寻找的标记的代码

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;
}
int-Marker::hammDistMarker(cv::Mat位)
{
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;

对于(int y=0;y您有一个名为ids[]的矩阵,该矩阵具有二进制中标记的代码。 如果以二进制读取,矩阵中的第一行是{1,0,0,0,0},标记图像显示图像中的第一行是一方白色和四方黑色

下一行有{black,white,white,black}={0,1,1,1,0},对应于矩阵中的第四行

函数的作用是:计算摄像机拍摄的图像与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}
  };
对不起,我试着上传一张图片,但是我不能

我希望这些信息能对你有所帮助


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

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