我想计算具有给定高度的相机到像素位置(世界坐标)的光线方向,如本文所述.相机图像尺寸为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).
定义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目标之外?
我正在尝试向同一系统上的普通用户授予 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 组,但效果不佳。有任何提示我在这里做错了什么吗?
我需要将外部构建的(共享)库作为逻辑构建目标集成到我的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邮件列表上问了这个问题,但到目前为止还没有收到任何答复.