【问题标题】:How to to read OpenCV image from the current working dir using VSCode and C++?如何使用 VSCode 和 C++ 从当前工作目录中读取 OpenCV 图像?
【发布时间】:2021-09-27 18:55:17
【问题描述】:

我目前正在设置 VS Code 以便能够运行 cpp 文件。现在我遇到了一个障碍:我不知道如何更改允许我从“src/”目录读取 OpenCV 图像的设置。目前,如果我想读取图像,我必须将它们放在“构建”目录中。当我使用 Clion 时,更改此选项非常容易, 编辑配置 ---> 工作目录:> 就是这样,但我似乎无法找到对 VS 执行相同操作的方法代码。

我不知道这是否与差异有关,但这是我的 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 3.16)
project(test_opencv)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
set(CMAKE_CXX_STANDARD 20)
set(OpenCV_FOUND 1)

find_package( OpenCV REQUIRED )

add_executable(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp)

target_link_libraries(test_opencv ${OpenCV_LIBS})

【问题讨论】:

    标签: c++ visual-studio-code vscode-settings


    【解决方案1】:

    您找不到 src 图像,因为执行二进制文件的位置找不到图像。这是由于相对路径和搜索当前目录 (**/build)。

    以下是我将如何解决这种情况以及如何设置我的 CMakelists。下面的 sn-p 显示了创建一些额外 DIRS 的“cmake ..”调用。

    #Project name
    set (CMAKE_CXX_STANDARD 11)
    project (myProject LANGUAGES CXX C)
    
    set(THREADS_PREFER_PTHREAD_FLAG ON)
    find_package(Threads REQUIRED)
    
    # Include all necessary DIRS
    include_directories(include)
    include_directories(/usr/include)
    
    # Get srcs files
    file(GLOB SRC_FILES ${PROJECT_SOURCE_DIR}/src/*.cpp)
    
    # Make bin dir
    file(MAKE_DIRECTORY build/bin)
    
    # Make resource dir
    file(MAKE_DIRECTORY build/resources)
    
    # Suppose you wanted to add an images folder specifically..
    file(MAKE_DIRECTORY build/bin/resources/images)
    

    在我的 cmake 树的根部,我为图像保留了一个额外的文件夹。这是我称之为的“图像档案”。我把所有东西都放在那里。当我想加载特定的图像/配置/任何东西时,我会将文件从根/存档复制到根/build/bin/** 位置。

    您访问信息的方式将取决于您使用的是相对路径还是绝对路径。我更喜欢几乎总是使用相对路径,以保持项目模块化并跨平台或跨系统运行。

    假设你的 .exe 在 /build/bin/myApp.exe 假设 img 位于 /build/resources/imgs/myImage1.png

    如下调用你的打开文件命令../resources/imgs/myImage1.png

    如果你想回到你的 src 目录也可以这样做

    ../src/*.png
    

    TLDR:您使用的是相对路径,并且可执行文件和图像不在同一目录中

    【讨论】:

    • 但这意味着我仍然需要复制文件。如果我不想复制任何内容,只想从我的 main.cpp 文件所在的同一路径读取图像怎么办?
    • 然后您必须更改访问图像的源代码调用。假设调用是 open(myImg.png) 新调用应该是: open(../src/myImg.png)
    • 但是为什么我可以在 Clion 上这样做呢?我只是更改了工作目录,然后我可以读取图像而无需声明构建的相对路径,例如:如果图像与 main.cpp 在同一个目录中,我可以执行 imread(image_path)。
    • Clion 可能会将可执行文件的 PWD 移动到您指定的位置。您可以通过以下方式对 vsCode 执行相同操作:修改您的 CMake 以仍使用构建文件夹,但将二进制文件部署到 ../src。或者您可以手动将二进制文件剪切/粘贴到 src DIR
    猜你喜欢
    • 1970-01-01
    • 2020-02-12
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 2017-05-10
    • 2013-11-18
    • 1970-01-01
    相关资源
    最近更新 更多