【问题标题】:OpenCV createsamples - invalid background description fileOpenCV createsamples - 无效的背景描述文件
【发布时间】:2014-05-01 20:28:52
【问题描述】:

我在我的OPENCV_ROOT 文件夹中并在 Win-x64 中运行以下命令:

opencv_createsamples -bgcolor 0 -bgthresh 0 -maxxangle 1.1 -maxyangle 1.1 
maxzangle 0.5 -maxidev 40 -w 80 -h 40 
-img ABSOLUTE_PATH_TO_POSITIVE_IMAGES_FOLDER\car.jpg 
-bg ABSOLUTE_PATH_TO_PROJECT\negatives.txt
-vec ABSOLUTE_PATH_TO_SAMPLES_FOLDER\car.jpg.vec 
-num 125

我的negatives.txt 看起来像这样:

negative_images\city01_02.jpg
negative_images\city01_04.jpg
negative_images\city01_05.jpg
negative_images\city01_06.jpg
negative_images\city01_07.jpg

这是我的输出:

Info file name: (NULL)
Img file name: ABSOLUTE_PATH_TO_POSITIVE_IMAGES_FOLDER\car.jpg
Vec file name: ABSOLUTE_PATH_TO_SAMPLES_FOLDER\car.jpg.vec
BG  file name: ABSOLUTE_PATH_TO_PROJECT\negatives.txt
Num: 125
BG color: 0
BG threshold: 0
Invert: FALSE
Max intensity deviation: 40
Max x angle: 1.1
Max y angle: 1.1
Max z angle: 0.5
Show samples: FALSE
Width: 80
Height: 40
Create training samples from single image applying distortions...
Invalid background description file.

我的底片收集文件 (negatives.txt) 有什么无效的地方?我尝试使用绝对路径和相对路径列出其中的文件。我正在关注this 教程。

【问题讨论】:

  • 这是一个棘手的问题。唔。您是否尝试过在negatives.txt 中命名完整路径?例如,C:\images\negative_images\city01_02.jpg 而不仅仅是 negative_images\city01_02.jpg?
  • 我怀疑的另一个原因可能是图像名称中的_
  • 是的,我试过不带下划线,但没有任何区别。我还尝试在底片中使用完整路径。我什至将negative_images文件夹也复制到了带有opencv_createsamples二进制文件的文件夹中,但没有区别。
  • 我已经成功了!问题只是我在 Notepad++ 中编写了集合文件名,一切看起来都很好。但是当我碰巧在记事本中打开同一个文件时,我注意到每个图像文件名后面都没有换行符!当我添加换行符时,我能够制作样本!然而,似乎负面因素并没有出现。当我查看样本时,它们按预期扭曲,但在黑色背景上,而不是在使用其中一张负片图像的背景上......知道吗?
  • 嘿,我有一个不同的解决方案。基本上创建了一个空的 bg2.txt 文件并粘贴所有 bg.txt 文件内容。在这里看到它:stackoverflow.com/questions/37378638/…

标签: opencv computer-vision sample training-data


【解决方案1】:

如果您在 Windows 上创建文件,并在 Linux 上运行它,例如Ubuntu,您必须更改“行尾序列”。

在CR LF上点击编辑器底部,将其改为LF再试一次!

记事本++:

Visual Studio 代码:

Geany:文档 > 设置行尾 > 转换并设置为 LF (Unix)

【讨论】:

    【解决方案2】:

    问题解决了!问题只是我在 Notepad++ 中编写了集合文件名,一切看起来都很好。但是当我碰巧在记事本中打开同一个文件时,我注意到每个图像文件名后面都没有换行符!当我添加换行符并运行命令时,创建的示例没有错误!

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。只需跳过图像地址之间的 。例如:在我的 negatives.dat 文件之前是:

      ./Negative_Images/197.
      ./Negative_Images/69.
      ./Negative_Images/510.
      ./Negative_Images/513.
      ./Negative_Images/169.png
      

      现在是:

      ./Negative_Images/197.png
      
      
      
      ./Negative_Images/69.png
      
      
      
      ./Negative_Images/510.png
      
      
      
      ./Negative_Images/513.png
      
      
      
      ./Negative_Images/169.png
      

      问题解决了。

      【讨论】:

      • 这正是接受答案的建议。
      【解决方案4】:

      就我而言,我正在使用脚本创建这个bg.txt 文件。基本上,它在做:

      for (int i = 0; i < numberOfImages; i++)
          {
                      myDescFile << imagesFolder + std::to_string(i) + ".jpg\n";
          }
      

      我只是添加了另一个\n,问题就消失了!

      myDescFile &lt;&lt; imagesFolder + std::to_string(i) + ".jpg\n\n";

      编辑:

      您还必须确保您的路径有/\\作为分隔符。否则,您将能够运行opencv_createsamples.exe cmd,不会出现错误,但永远不会看到最后的Done

      例如:L:/imgTraining/plant/bnw/0.jpg

      这是一张来自notepad++的好bg文件图片(激活View&gt;Show Symbol&gt;Show End of Line并选择Edit&gt;EOL Conversion&gt;Windows (CR LF)):

      【讨论】:

      • 以上方法我都试过了。奇怪的是:opencv_createsamples.exe (v. 3.4.7) 运行了几个 100 个文件,然后给了我这个错误。如果我从我的 bg.txt 中删除该特定行,它会越过它,但会在另一行停止并出现相同的错误。我重复了这个ca。 20次,但每次都停在另一次。例如/neg/IMG_3049.JPG 会处理,但下一行 /neg/IMG_3051.JPG 会失败。
      【解决方案5】:

      sudo apt-get install dos2unix 在 Linux 上安装 dos2unix。 现在你只需要使用dos2unix YourFileName.txt

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-10
        • 2016-08-12
        • 1970-01-01
        • 2017-03-23
        • 2020-04-15
        • 2010-09-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多