From d65e1aeed52d30b2d1a2a1425089392c546d2ba1 Mon Sep 17 00:00:00 2001 From: USW Date: Wed, 21 May 2025 12:11:58 +0900 Subject: [PATCH] =?UTF-8?q?14=EB=81=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Capstone_Design.sln | 46 ++++++ Homework/stitching/main.cpp | 18 +++ Homework/stitching/stitching.vcxproj | 139 ++++++++++++++++++ Homework/stitching/stitching.vcxproj.filters | 22 +++ ch14/corners/corners.vcxproj | 142 +++++++++++++++++++ ch14/corners/corners.vcxproj.filters | 27 ++++ ch14/corners/main.cpp | 63 ++++++++ ch14/keypoints/keypoints.vcxproj | 139 ++++++++++++++++++ ch14/keypoints/keypoints.vcxproj.filters | 22 +++ ch14/keypoints/main.cpp | 29 ++++ ch14/matching/main.cpp | 114 +++++++++++++++ ch14/matching/matching.vcxproj | 139 ++++++++++++++++++ ch14/matching/matching.vcxproj.filters | 22 +++ 13 files changed, 922 insertions(+) create mode 100644 Homework/stitching/main.cpp create mode 100644 Homework/stitching/stitching.vcxproj create mode 100644 Homework/stitching/stitching.vcxproj.filters create mode 100644 ch14/corners/corners.vcxproj create mode 100644 ch14/corners/corners.vcxproj.filters create mode 100644 ch14/corners/main.cpp create mode 100644 ch14/keypoints/keypoints.vcxproj create mode 100644 ch14/keypoints/keypoints.vcxproj.filters create mode 100644 ch14/keypoints/main.cpp create mode 100644 ch14/matching/main.cpp create mode 100644 ch14/matching/matching.vcxproj create mode 100644 ch14/matching/matching.vcxproj.filters diff --git a/Capstone_Design.sln b/Capstone_Design.sln index 7d52f13..3c1ba0e 100644 --- a/Capstone_Design.sln +++ b/Capstone_Design.sln @@ -89,6 +89,16 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hog", "ch13\hog\hog.vcxproj EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "QRCode", "Homework\QRCode\QRCode.vcxproj", "{8F1A6584-B3EF-405A-83BF-F394848DA563}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ch14", "ch14", "{9DEF9106-146A-4E03-B4E3-9CF41F9844DC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "corners", "ch14\corners\corners.vcxproj", "{C0C4BB05-468C-4115-8347-711EF03A1B65}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "keypoints", "ch14\keypoints\keypoints.vcxproj", "{0A03E1F6-AE40-4F86-B0E6-152B7D6C7820}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "matching", "ch14\matching\matching.vcxproj", "{2345724D-8858-4CBF-A8E4-98947BC56DF1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stitching", "Homework\stitching\stitching.vcxproj", "{16DCB3B7-0FDC-43AD-902E-196F0F94DD02}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -337,6 +347,38 @@ Global {8F1A6584-B3EF-405A-83BF-F394848DA563}.Release|x64.Build.0 = Release|x64 {8F1A6584-B3EF-405A-83BF-F394848DA563}.Release|x86.ActiveCfg = Release|Win32 {8F1A6584-B3EF-405A-83BF-F394848DA563}.Release|x86.Build.0 = Release|Win32 + {C0C4BB05-468C-4115-8347-711EF03A1B65}.Debug|x64.ActiveCfg = Debug|x64 + {C0C4BB05-468C-4115-8347-711EF03A1B65}.Debug|x64.Build.0 = Debug|x64 + {C0C4BB05-468C-4115-8347-711EF03A1B65}.Debug|x86.ActiveCfg = Debug|Win32 + {C0C4BB05-468C-4115-8347-711EF03A1B65}.Debug|x86.Build.0 = Debug|Win32 + {C0C4BB05-468C-4115-8347-711EF03A1B65}.Release|x64.ActiveCfg = Release|x64 + {C0C4BB05-468C-4115-8347-711EF03A1B65}.Release|x64.Build.0 = Release|x64 + {C0C4BB05-468C-4115-8347-711EF03A1B65}.Release|x86.ActiveCfg = Release|Win32 + {C0C4BB05-468C-4115-8347-711EF03A1B65}.Release|x86.Build.0 = Release|Win32 + {0A03E1F6-AE40-4F86-B0E6-152B7D6C7820}.Debug|x64.ActiveCfg = Debug|x64 + {0A03E1F6-AE40-4F86-B0E6-152B7D6C7820}.Debug|x64.Build.0 = Debug|x64 + {0A03E1F6-AE40-4F86-B0E6-152B7D6C7820}.Debug|x86.ActiveCfg = Debug|Win32 + {0A03E1F6-AE40-4F86-B0E6-152B7D6C7820}.Debug|x86.Build.0 = Debug|Win32 + {0A03E1F6-AE40-4F86-B0E6-152B7D6C7820}.Release|x64.ActiveCfg = Release|x64 + {0A03E1F6-AE40-4F86-B0E6-152B7D6C7820}.Release|x64.Build.0 = Release|x64 + {0A03E1F6-AE40-4F86-B0E6-152B7D6C7820}.Release|x86.ActiveCfg = Release|Win32 + {0A03E1F6-AE40-4F86-B0E6-152B7D6C7820}.Release|x86.Build.0 = Release|Win32 + {2345724D-8858-4CBF-A8E4-98947BC56DF1}.Debug|x64.ActiveCfg = Debug|x64 + {2345724D-8858-4CBF-A8E4-98947BC56DF1}.Debug|x64.Build.0 = Debug|x64 + {2345724D-8858-4CBF-A8E4-98947BC56DF1}.Debug|x86.ActiveCfg = Debug|Win32 + {2345724D-8858-4CBF-A8E4-98947BC56DF1}.Debug|x86.Build.0 = Debug|Win32 + {2345724D-8858-4CBF-A8E4-98947BC56DF1}.Release|x64.ActiveCfg = Release|x64 + {2345724D-8858-4CBF-A8E4-98947BC56DF1}.Release|x64.Build.0 = Release|x64 + {2345724D-8858-4CBF-A8E4-98947BC56DF1}.Release|x86.ActiveCfg = Release|Win32 + {2345724D-8858-4CBF-A8E4-98947BC56DF1}.Release|x86.Build.0 = Release|Win32 + {16DCB3B7-0FDC-43AD-902E-196F0F94DD02}.Debug|x64.ActiveCfg = Debug|x64 + {16DCB3B7-0FDC-43AD-902E-196F0F94DD02}.Debug|x64.Build.0 = Debug|x64 + {16DCB3B7-0FDC-43AD-902E-196F0F94DD02}.Debug|x86.ActiveCfg = Debug|Win32 + {16DCB3B7-0FDC-43AD-902E-196F0F94DD02}.Debug|x86.Build.0 = Debug|Win32 + {16DCB3B7-0FDC-43AD-902E-196F0F94DD02}.Release|x64.ActiveCfg = Release|x64 + {16DCB3B7-0FDC-43AD-902E-196F0F94DD02}.Release|x64.Build.0 = Release|x64 + {16DCB3B7-0FDC-43AD-902E-196F0F94DD02}.Release|x86.ActiveCfg = Release|Win32 + {16DCB3B7-0FDC-43AD-902E-196F0F94DD02}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -372,6 +414,10 @@ Global {6B37E9B3-8726-49BC-91B9-3763A6F6EBE9} = {960B2CF4-8CBC-4433-A6D8-D3BA9ACB190F} {51870ED7-A3B0-4AAE-81B0-422A7DBCB34E} = {960B2CF4-8CBC-4433-A6D8-D3BA9ACB190F} {8F1A6584-B3EF-405A-83BF-F394848DA563} = {E583E257-9FCE-4A4B-A554-8514F982D1BF} + {C0C4BB05-468C-4115-8347-711EF03A1B65} = {9DEF9106-146A-4E03-B4E3-9CF41F9844DC} + {0A03E1F6-AE40-4F86-B0E6-152B7D6C7820} = {9DEF9106-146A-4E03-B4E3-9CF41F9844DC} + {2345724D-8858-4CBF-A8E4-98947BC56DF1} = {9DEF9106-146A-4E03-B4E3-9CF41F9844DC} + {16DCB3B7-0FDC-43AD-902E-196F0F94DD02} = {E583E257-9FCE-4A4B-A554-8514F982D1BF} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E1A0C3F4-F16D-4626-86CE-D8484C0C776D} diff --git a/Homework/stitching/main.cpp b/Homework/stitching/main.cpp new file mode 100644 index 0000000..fee6aca --- /dev/null +++ b/Homework/stitching/main.cpp @@ -0,0 +1,18 @@ +#include +#include "opencv2/opencv.hpp" + +using namespace std; +using namespace cv; + +int main(int argc, char* argv[]) { + if (argc < 3) { + cerr << "useage: " << argv[0] << " [...]" << endl; + exit(EXIT_FAILURE); + } + vector imgs; + for (int i = 1; i < argc; i++) { + Mat img = imread(argv[i]); + + imgs.push_back(img); + } +} \ No newline at end of file diff --git a/Homework/stitching/stitching.vcxproj b/Homework/stitching/stitching.vcxproj new file mode 100644 index 0000000..c0f3219 --- /dev/null +++ b/Homework/stitching/stitching.vcxproj @@ -0,0 +1,139 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 17.0 + Win32Proj + {16dcb3b7-0fdc-43ad-902e-196f0f94dd02} + stitching + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/Homework/stitching/stitching.vcxproj.filters b/Homework/stitching/stitching.vcxproj.filters new file mode 100644 index 0000000..2c1b3dc --- /dev/null +++ b/Homework/stitching/stitching.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 소스 파일 + + + \ No newline at end of file diff --git a/ch14/corners/corners.vcxproj b/ch14/corners/corners.vcxproj new file mode 100644 index 0000000..428f414 --- /dev/null +++ b/ch14/corners/corners.vcxproj @@ -0,0 +1,142 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 17.0 + Win32Proj + {c0c4bb05-468c-4115-8347-711ef03a1b65} + corners + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/ch14/corners/corners.vcxproj.filters b/ch14/corners/corners.vcxproj.filters new file mode 100644 index 0000000..dd4b696 --- /dev/null +++ b/ch14/corners/corners.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 소스 파일 + + + + + 리소스 파일 + + + \ No newline at end of file diff --git a/ch14/corners/main.cpp b/ch14/corners/main.cpp new file mode 100644 index 0000000..50b6bb6 --- /dev/null +++ b/ch14/corners/main.cpp @@ -0,0 +1,63 @@ +#include +#include "opencv2/opencv.hpp" + +using namespace std; +using namespace cv; + +void corner_harris() { + Mat src = imread("../../resources/images/building.jpg", IMREAD_GRAYSCALE); + + Mat harris; + cornerHarris(src, harris, 3, 3, 0.04); + + Mat harris_norm; + normalize(harris, harris_norm, 0, 255, NORM_MINMAX, CV_8U); + + Mat dst; + cvtColor(src, dst, COLOR_GRAY2BGR); + + for (int j = 1; j < harris.rows - 1; j++) { + for (int i = 1; i < harris.cols - 1; i++) { + if (harris_norm.at(j, i) > 120) { + if (harris.at(j, i) > harris.at(j - 1, i) && + harris.at(j, i) > harris.at(j + 1, i) && + harris.at(j, i) > harris.at(j, i - 1) && + harris.at(j, i) > harris.at(j, i + 1)) { + circle(dst, Point(i, j), 5, Scalar(0, 0, 255), 2); + } + } + } + } + + imshow("src", src); + imshow("harris_norm", harris_norm); + imshow("dst", dst); + + waitKey(0); + destroyAllWindows(); +} + +void corner_fast() { + Mat src = imread("../../resources/images/building.jpg", IMREAD_GRAYSCALE); + + vector keypoints; + FAST(src, keypoints, 60, true); + + Mat dst; + cvtColor(src, dst, COLOR_GRAY2BGR); + + for (KeyPoint kp : keypoints) { + Point pt(cvRound(kp.pt.x), cvRound(kp.pt.y)); + circle(dst, pt, 5, Scalar(0, 0, 255), 2); + } + + imshow("src", src); + imshow("dst", dst); + + waitKey(0); + destroyAllWindows(); +} + +int main() { + corner_fast(); +} \ No newline at end of file diff --git a/ch14/keypoints/keypoints.vcxproj b/ch14/keypoints/keypoints.vcxproj new file mode 100644 index 0000000..0d3c8e6 --- /dev/null +++ b/ch14/keypoints/keypoints.vcxproj @@ -0,0 +1,139 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 17.0 + Win32Proj + {0a03e1f6-ae40-4f86-b0e6-152b7d6c7820} + keypoints + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/ch14/keypoints/keypoints.vcxproj.filters b/ch14/keypoints/keypoints.vcxproj.filters new file mode 100644 index 0000000..2c1b3dc --- /dev/null +++ b/ch14/keypoints/keypoints.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 소스 파일 + + + \ No newline at end of file diff --git a/ch14/keypoints/main.cpp b/ch14/keypoints/main.cpp new file mode 100644 index 0000000..37a472b --- /dev/null +++ b/ch14/keypoints/main.cpp @@ -0,0 +1,29 @@ +#include +#include "opencv2/opencv.hpp" + +using namespace std; +using namespace cv; + +int main() { + Mat src = imread("../../resources/images/box_in_scene.png", IMREAD_GRAYSCALE); + + Ptr feature = ORB::create(); + + vector keypoints; + feature->detect(src, keypoints); + + Mat desc; + feature->compute(src, keypoints, desc); + + cout << "keypoints.size(): " << keypoints.size() << endl; + cout << "desc.size(): " << desc.size() << endl; + + Mat dst; + drawKeypoints(src, keypoints, dst, Scalar::all(-1), DrawMatchesFlags::DRAW_RICH_KEYPOINTS); + + imshow("src", src); + imshow("dst", dst); + + waitKey(0); + destroyAllWindows(); +} \ No newline at end of file diff --git a/ch14/matching/main.cpp b/ch14/matching/main.cpp new file mode 100644 index 0000000..6a455bd --- /dev/null +++ b/ch14/matching/main.cpp @@ -0,0 +1,114 @@ +#include +#include "opencv2/opencv.hpp" + +using namespace std; +using namespace cv; + +void keypoint_matching() { + Mat src1 = imread("../../resources/images/box.png", IMREAD_GRAYSCALE); + Mat src2 = imread("../../resources/images/box_in_scene.png", IMREAD_GRAYSCALE); + + Ptr feature = ORB::create(); + + vector keypoints1, keypoints2; + Mat desc1, desc2; + feature->detectAndCompute(src1, Mat(), keypoints1, desc1); + feature->detectAndCompute(src2, Mat(), keypoints2, desc2); + + Ptr matcher = BFMatcher::create(NORM_HAMMING); + + vector matches; + matcher->match(desc1, desc2, matches); + + Mat dst; + drawMatches(src1, keypoints1, src2, keypoints2, matches, dst); + + imshow("dst", dst); + + waitKey(0); + destroyAllWindows(); +} + +void good_matching() { + Mat src1 = imread("../../resources/images/box.png", IMREAD_GRAYSCALE); + Mat src2 = imread("../../resources/images/box_in_scene.png", IMREAD_GRAYSCALE); + + Ptr feature = ORB::create(); + + vector keypoints1, keypoints2; + Mat desc1, desc2; + feature->detectAndCompute(src1, Mat(), keypoints1, desc1); + feature->detectAndCompute(src2, Mat(), keypoints2, desc2); + + Ptr matcher = BFMatcher::create(NORM_HAMMING); + + vector matches; + matcher->match(desc1, desc2, matches); + + sort(matches.begin(), matches.end()); + + vector good_matches(matches.begin(), matches.begin() + 50); + + Mat dst; + drawMatches(src1, keypoints1, src2, keypoints2, good_matches, dst, Scalar::all(-1), Scalar::all(-1), vector(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS); + + imshow("dst", dst); + + waitKey(0); + destroyAllWindows(); +} + +void find_homography() { + Mat src1 = imread("../../resources/images/box.png", IMREAD_GRAYSCALE); + Mat src2 = imread("../../resources/images/box_in_scene.png", IMREAD_GRAYSCALE); + + Ptr orb = ORB::create(); + + vector keypoints1, keypoints2; + Mat desc1, desc2; + orb->detectAndCompute(src1, Mat(), keypoints1, desc1); + orb->detectAndCompute(src2, Mat(), keypoints2, desc2); + + Ptr matcher = BFMatcher::create(NORM_HAMMING); + + vector matches; + matcher->match(desc1, desc2, matches); + + sort(matches.begin(), matches.end()); + + vector good_matches(matches.begin(), matches.begin() + 50); + + Mat dst; + drawMatches(src1, keypoints1, src2, keypoints2, good_matches, dst, Scalar::all(-1), Scalar::all(-1), vector(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS); + + vector pts1, pts2; + for (size_t i = 0; i < good_matches.size(); i++) { + pts1.push_back(keypoints1[good_matches[i].queryIdx].pt); + pts2.push_back(keypoints2[good_matches[i].trainIdx].pt); + } + + Mat H = findHomography(pts1, pts2, RANSAC); + + vector corners1, corners2; + corners1.emplace_back(0.f, 0.f); + corners1.emplace_back(src1.cols - 1.f, 0.f); + corners1.emplace_back(src1.cols - 1.f, src1.rows - 1.f); + corners1.emplace_back(0.f, src1.rows - 1.f); + perspectiveTransform(corners1, corners2, H); + + vector corners_dst; + for (Point2f pt : corners2) { + corners_dst.emplace_back(cvRound(pt.x + src1.cols), cvRound(pt.y)); + } + + polylines(dst, corners_dst, true, Scalar(0, 255, 0), 2, LINE_AA); + + imshow("dst", dst); + + waitKey(0); + destroyAllWindows(); +} + +int main() { + find_homography(); +} \ No newline at end of file diff --git a/ch14/matching/matching.vcxproj b/ch14/matching/matching.vcxproj new file mode 100644 index 0000000..a4c3c23 --- /dev/null +++ b/ch14/matching/matching.vcxproj @@ -0,0 +1,139 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 17.0 + Win32Proj + {2345724d-8858-4cbf-a8e4-98947bc56df1} + matching + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/ch14/matching/matching.vcxproj.filters b/ch14/matching/matching.vcxproj.filters new file mode 100644 index 0000000..2c1b3dc --- /dev/null +++ b/ch14/matching/matching.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 소스 파일 + + + \ No newline at end of file