Open syberspaz opened 3 years ago
Hi @syberspaz,
AFAIK Visual Studio is currently stuck on OpenMP 2.0 which only supports signed loop variables but apparently Microsoft is working on improving their OpenMP support according to a recent blog entry [1]. You could try the -openmp:llvm
command-line option if you have the VS 16.9 preview release.
Otherwise, it's been a while since I've compiled mvs-texturing on Windows but maybe you'll find the following two commits helpful which contain changes I had to make to get it to compile with Visual Studio: https://github.com/andre-schulz/mvs-texturing/commit/b267b54543db694ed2aa026780f7e420e74ae864 https://github.com/andre-schulz/mvs-texturing/commit/91f4a8407cc07c8691c12c668a3399e3272d8ba0
[1] https://devblogs.microsoft.com/cppblog/improved-openmp-support-for-cpp-in-visual-studio/
thanks, for some reason its the load_nvm_bundle() function and the multi_gauss_unnormalized functions that are tripping me up at the moment..... I was able to get around the openmp by disabling the openMP entirely ....
as for the multi_gauss_normalized issue, in the "tex" project, I'm getting the compile error below. The particular code snippet that is relevant is:
for (std::size_t row = 0; row < infos->size(); ++row) { Eigen::RowVector3d color = mve_to_eigen(infos->at(row).mean_color).cast
(); double gauss_value = multi_gauss_unnormalized(color, var_mean, covariance_inv); is_inlier[row] = (gauss_value >= gauss_rejection_threshold ? 1 : 0); }
I'm not sure why this call is causing an issue, intellisense can find the function and I can peek to find the definition:
template <typename T, int N> T const multi_gauss_unnormalized(Eigen::Matrix<T, 1, N> const & X, Eigen::Matrix<T, 1, N> const & mu, Eigen::Matrix<T, N, N> const & covariance_inv) { Eigen::Matrix<T, 1, N> mean_removed = X - mu; return std::exp(T(-0.5) mean_removed covariance_inv * mean_removed.adjoint()); }
Strange.
1>C:\Users\hogue\Documents\GitHub\mvs-texturing\libs\tex\calculate_data_costs.cpp(102,34): error C2672: 'multi_gauss_unnormalized': no matching overloaded function found 1>C:\Users\hogue\Documents\GitHub\mvs-texturing\libs\tex\calculate_data_costs.cpp(102,90): error C2784: 'const T multi_gauss_unnormalized(const Eigen::Matrix<T,1,N,0|true&&_Cols!=1?Eigen::RowMajor:_Cols==1&&false?Eigen::ColMajor:Eigen::ColMajor,1,_Cols> &,const Eigen::Matrix<T,1,N,0|true&&_Cols!=1?Eigen::RowMajor:_Cols==1&&false?Eigen::ColMajor:Eigen::ColMajor,1,_Cols> &,const Eigen::Matrix<T,N,N,0|_Rows==1&&_Cols!=1?Eigen::RowMajor:_Cols==1&&_Rows!=1?Eigen::ColMajor:Eigen::ColMajor,_Rows,_Cols> &)': could not deduce template argument for 'const Eigen::Matrix<T,1,N,0|true&&_Cols!=1?Eigen::RowMajor:_Cols==1&&false?Eigen::ColMajor:Eigen::ColMajor,1,_Cols> &' from 'Eigen::RowVector3d' 1>C:\Users\hogue\Documents\GitHub\mvs-texturing\libs\tex\util.h(61): message : see declaration of 'multi_gauss_unnormalized' 1>C:\Users\hogue\Documents\GitHub\mvs-texturing\libs\tex\calculate_data_costs.cpp(218,44): warning C4838: conversion from 'short' to 'uint16_t' requires a narrowing conversion 1>Done building project "tex.vcxproj" -- FAILED.
The second commit I've linked contains a possible fix for that. Have you tried passing the template parameters explicitly?
For example: double gauss_value = multi_gauss_unnormalized<double, 3>(color, var_mean, covariance_inv);
aha! Thanks! yes, explicitly providing the template parameters solved that particular issue... oh C++.....
still running into the load_nvm_bundle issue: I wonder if its a name mangling issue.......
Severity Code Description Project File Line Suppression State
Error LNK2019 unresolved external symbol "class std::shared_ptr
In tex.lib : generate_texture_views.cpp, the relevant snippet is:
mve::Bundle::Ptr bundle = mve::load_nvm_bundle(nvm_file, &nvm_cams);
which is declared in bundle_io.h as:
/**
- Loads an NVM bundle file while providing NVM specific information.
- Docs: http://homes.cs.washington.edu/~ccwu/vsfm/doc.html#nvm
- This function provides a bundle with cameras where the focal length is in
- VisualSFM conventions, NOT MVE conventions. To convert to focal length to
- MVE conventions, it must be divided by the maximum image dimension. / Bundle::Ptr load_nvm_bundle (std::string const& filename, std::vector
camera_info = nullptr);
Aha! i think I've found it. The MVE that mvs-texturing is using looks to be different than the MVE that I've compiled to on my system..... The one on my system doesn't have an "NVMCameraInfo" but rather an "AdditionalCameraInfo" struct. Now to fix!
hacky hacky, but it let's it compile:
MVE_NAMESPACE_BEGIN typedef struct AdditionalCameraInfo NVMCameraInfo;
now..... does it work.....
Yes. With some changes. Check this OpenDroneMap branch that compiles on Windows. https://github.com/OpenDroneMap/mvs-texturing/tree/262
I've been able to compile mve, but I'm having significant trouble getting mvs-texturing to compile in VS2019. Any suggestions? a few things I've noticed so far,
Error output: