【问题标题】:How to load jpeg picture from directory如何从目录加载jpeg图片
【发布时间】:2022-01-26 12:12:34
【问题描述】:

我正在尝试从该路径加载和绘制图片:

C:\Users\Rayane_2\Desktop\Data\PCB-DATASET-master\PCB-DATASET-master\01_missing_hole_01.jpeg

我试过了:

library(imager)
file <- system.file('C:\Users\Rayane_2\Desktop\Data\PCB-DATASET-master\PCB-DATASET-master\01_missing_hole_01.jpeg',package='imager')
im <- load.image(file)
im # file not found

软件包提供的正确运行示例:

library(imager)
file <- system.file('extdata/parrots.png',package='imager')
#system.file gives the full path for a file that ships with a R package
#if you already have the full path to the file you want to load just run:
#im <- load.image("/somedirectory/myfile.png")
im <- load.image(file)
plot(im) #Parrots!

感谢您的帮助!

【问题讨论】:

  • (1) 目录反斜杠(windows)必须总是转义,所以"C:\\Users\\Rayane_2\\..."。不过,即使在 Windows 上,您也可以像 "C:/Users/Rayane_2/..." 中那样使用正斜杠,但许多人发现双反斜杠在视觉上令人不快。 (2) system.file 查找包内的文件,一般不查找。任何包中都没有名为"C:\\Users\\...\\01_missing_hole_01.jpg" 的文件。要么使用load.image("C:\\Users\\...\01_missing_hole_01.jpg")
  • 来自?system.file,该函数旨在查找“包中文件的完整文件名”
  • 我需要从桌面找到的文件目录加载
  • 看我的回答。底线,停止使用system.file,这是任务的错误功能。

标签: r image-processing


【解决方案1】:
  1. 反斜杠作为目录分隔符必须转义,你应该已经看到错误了

    Error: '\U' used without hex digits in character string starting ""C:\U"
    

    用另一个反斜杠转义它,如

    'C:\\Users\\Rayane_2\\Desktop\\Data\\PCB-DATASET-master\\PCB-DATASET-master\\01_missing_hole_01.jpeg'
    

    不过,即使在 Windows 上,也可以使用正斜杠,所以这也可以:

    'C:/Users/Rayane_2/Desktop/Data/PCB-DATASET-master/PCB-DATASET-master/01_missing_hole_01.jpeg'
    
  2. system.file 只查找包内的文件。来自?system.file

    Description
    
        Finds the full file names of files in packages etc.
    
    
    Arguments
        ...: character vectors, specifying subdirectory and file(s) within
             some package.  The default, none, returns the root of the
             package.  Wildcards are not supported.
    
    

    这意味着... 参数中提供的所有路径都必须是相对的。一个这样的例子就是您在问题中提出的内容,

    system.file('extdata/parrots.png',package='imager')
    

    如果您查看已安装包的文件结构(可能是C:/Users/Rayane_2/R/win_library/4.1/imager),您会看到名为MetaRdatadochelphtml 的目录, 和(不是在每个包中都找到)extdata。在那个目录中必须是parrots.png。如果在指定包的安装目录中找到文件,则返回您查找的文件的完整(绝对)路径。

    system.file是你可能不知道完整路径。当 (1) 以编程方式在其他用户将使用您的代码的情况下执行某些操作时,这是一个好方法; (2)你在.libPaths()中有多个库路径,不知道哪一个包含包,又不想自己检查所有;或者 (3) 你想要更短、更自文档化的代码。

    如果您已经知道文件的完整路径,那么system.file 将无济于事。

    底线,system.file 是错误的函数。

  3. 直接加载文件即可。

    library(imager)
    im <- load.image('C:/Users/Rayane_2/Desktop/Data/PCB-DATASET-master/PCB-DATASET-master/01_missing_hole_01.jpeg')
    

【讨论】:

    【解决方案2】:

    使用其中之一。

    有关详细信息,请参阅?Quotes?file.path?Sys.getenv?path.expandpath.expand 示例将取决于您的主目录的设置方式,但通常它已设置为 C:\Users\yourname\Documents

    file.path("C:", "Users", "Rayane_2", "Desktop", "Data", "PCB-DATASET-master",
      "PCB-DATASET-master", "01_missing_hole_01.jpeg")
    
    file.path(Sys.getenv("USERPROFILE"), "Desktop", "Data", "PCB-DATASET-master",
      "PCB-DATASET-master", "01_missing_hole_01.jpeg")
    
    r"{C:\Users\Rayane_2\Desktop\Data\PCB-DATASET-master\PCB-DATASET-master\01_missing_hole_01.jpeg}"
    
    "C:\\Users\\Rayane_2\\Desktop\\Data\\PCB-DATASET-master\\PCB-DATASET-master\\01_missing_hole_01.jpeg"
    
    # this depends on how your home variable has been set but the
    #   setting is often such that this works
    path.expand("~\\..\\Desktop\\Data\\PCB-DATASET-master\\PCB-DATASET-master\\01_missing_hole_01.jpeg")
    
    "C:/Users/Rayane_2/Desktop/Data/PCB-DATASET-master/PCB-DATASET-master/01_missing_hole_01.jpeg"
    
    # after entering this navigate to file. This will display the path
    #   to the file and you can then copy and paste it from the 
    #   R console into your code.
    file.choose()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-10
      • 2022-01-26
      • 1970-01-01
      • 2019-02-03
      相关资源
      最近更新 更多