小编New*_*gie的帖子

计算相机光线方向到3d世界像素

我想计算具有给定高度的相机到像素位置(世界坐标)的光线方向,如本文所述.相机图像尺寸为640,480.我校准了固有的相机参数并且不对每个图像进行分类.我测量了相机和背景平面(29厘米)之间的物理距离,如下图所示:

现场

1 cm转换为25像素(假设为二次像素).我的第一种方法是根据像素和摄像机位置进行计算,如下所示:

float3 pixPos = (float3)(u, v, z);
float3 camPos = (float3)(height/2, width/2, 29*25);
float3 ray = normalize(pixPos-camPos);
Run Code Online (Sandbox Code Playgroud)

其中u,v是从0,0到高度的图像坐标,宽度和z是我(已经估计的)高度值.这似乎不是正确的方法.我已经对SO进行了搜索并找到了这个答案,但是那里描述的解决方案不包括像素高度(这里是z).

graphics camera trace pixel

7
推荐指数
1
解决办法
6400
查看次数

在CMake中使用别名目标

定义CMake目标时,可以创建别名目标,以便别名可用于在后续命令中引用定义的目标.例如

add_library(foo_lib foo.cpp bar.cpp bat.cpp)
add_library(foo::lib ALIAS foo_lib)
Run Code Online (Sandbox Code Playgroud)

据我所知,这样做的好处是名称foo_lib不会作为制作目标出现.但是,给定这样一个别名,我想为它们设置各种属性,例如:

set_target_properties(foo::lib PROPERTIES COMPILE_DEFINITIONS ...)
target_include_directories(foo::lib PUBLIC ... PRIVATE ...)
Run Code Online (Sandbox Code Playgroud)

但不幸的是,这是不可能的,因为CMake错误:set_target_properties不能在ALIAS目标上使用.我不明白为什么这不可能,因为我想定义我的lib的名称一次,并在我想调整目标的属性时引用给定的别名.有关如何"正确"使用ALIAS目标的任何提示?ALIAS目标的目的是什么,除了它们没有出现在Make目标之外?

c++ cmake

7
推荐指数
1
解决办法
7030
查看次数

“其他”的文件读取权限不起作用

我正在尝试向同一系统上的普通用户授予 lighttpd 访问日志文件的读取权限。目前的权限是:

-rw-r--r-- 1 www-data www-data 211K Feb 28 11:27 /var/log/lighttpd/access.log

所以,如果我理解正确的话,其他人有读取权限。不幸的是这似乎不起作用。如果我尝试使用用户帐户读取此文件,我会得到:

/var/log/lighttpd/access.log: Permission denied

我已经尝试将用户添加到 www-data 组,但效果不佳。有任何提示我在这里做错了什么吗?

linux file-permissions logfiles

4
推荐指数
1
解决办法
2309
查看次数

如何将外部(共享)库包含在几个dll/dylib中

我需要将外部构建的(共享)库作为逻辑构建目标集成到我的CMake配置中,该配置由几个共享库文件(dlls/dylibs)组成.通常我会做以下事情:

find_path(MyLib_INCLUDE_DIR mylib.h HINTS ${MyLib_PATH}/include)
find_library(MyLib_LIBRARY NAMES MyLib HINTS ${MyLib_PATH}/bin)
find_library(MyLib_LIBRARY_DEBUG NAMES MyLib_d ${MyLib_PATH}/bin)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(MyLib DEFAULT_MSG
  MyLib_LIBRARY MyLib_LIBRARY_DEBUG MyLib_INCLUDE_DIR)

if(MyLib_FOUND AND NOT TARGET MyLib::MyLib)
  set(MyLib_LIBRARIES ${MyLib_LIBRARY})
  set(MyLib_INCLUDE_DIRS ${MyLib_INCLUDE_DIR})

  add_library(MyLib::MyLib UNKNOWN IMPORTED)
  set_target_properties(MyLib::MyLib PROPERTIES
    INTERFACE_INCLUDE_DIRECTORIES ${MyLib_INCLUDE_DIR}
    IMPORTED_LOCATION ${MyLib_LIBRARY}
    IMPORTED_LOCATION_DEBUG ${MyLib_LIBRARY_DEBUG})

    mark_as_advanced(MyLib_INCLUDE_DIR MyLib_LIBRARY MyLib_LIBRARY_DEBUG)
endif()
Run Code Online (Sandbox Code Playgroud)

我的理解是,add_library(... UNKOWN IMPORTED)CMake会自己找出共享/静态库(并且BUILD_SHARED_LIBS可能基于该选项 ,但这不是必需的).但是,CMake不允许向属性添加库列表 IMPORTED_LOCATION.对于Instance,如果我想将MyLib,MyLibFoo和MyLibBar作为调试和发布版本导入,则使用列出的方法无法实现.

我知道add_library(MyLib::MyLib INTERFACE IMPORTED)并为属性设置了一个库列表INTERFACE_LINK_LIBRARIES,但是在创建可重定位包的情况下这是有问题的(如CMake文档中所述).此外,没有这样的属性INTERFACE_LINK_LIBRARIES_DEBUG,因此只能引用我外部导入的库的发布版本或调试版本.

那么,我应该如何将我外部构建的库导入为可重定位的逻辑CMake目标,该目标实际上包括几个调试或发布版本的共享库文件?

免责声明:我已经在CMake邮件列表上问了这个问题,但到目前为止还没有收到任何答复.

c++ cmake

3
推荐指数
1
解决办法
140
查看次数

标签 统计

c++ ×2

cmake ×2

camera ×1

file-permissions ×1

graphics ×1

linux ×1

logfiles ×1

pixel ×1

trace ×1