diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1cf4902f51444c6f13b15032c209fcf4c076623b..f52f4d5b5c741d05a8f224e3c4763059ebdc4f12 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -8,6 +8,8 @@ add_executable(camera_calibration
 	src/main.cc
 )
 
+set_property(TARGET camera_calibration PROPERTY CXX_STANDARD 17)
+
 find_package(OpenCV 4 QUIET)
 if(NOT OpenCV_FOUND)
     find_package(OpenCV 3 REQUIRED)
diff --git a/src/main.cc b/src/main.cc
index 8d6f185a311a4df61be531a07157fb5e29af12d4..571872d0bc10f04df61834a5eb600d35e80ea277 100755
--- a/src/main.cc
+++ b/src/main.cc
@@ -5,6 +5,7 @@
 #include <string>
 #include <ctime>
 #include <cstdio>
+#include <filesystem>
 
 #include <opencv2/core.hpp>
 #include <opencv2/core/utility.hpp>
@@ -567,7 +568,11 @@ static void saveCameraParams( Settings& s, Size& imageSize, Mat& cameraMatrix, M
                               const vector<float>& reprojErrs, const vector<vector<Point2f> >& imagePoints,
                               double totalAvgErr )
 {
+    filesystem::create_directories(filesystem::path(s.outputFileName).parent_path());
+
     FileStorage fs( s.outputFileName, FileStorage::WRITE );
+    if (!fs.isOpened())
+        throw std::runtime_error("Could not open camara parameters file for writing");
 
     time_t tm;
     time( &tm );