From 86a66bbeff749f60359561f89907406fae366a4b Mon Sep 17 00:00:00 2001 From: HappyTanuki Date: Tue, 25 Mar 2025 13:52:04 +0900 Subject: [PATCH] =?UTF-8?q?=EC=8B=9C=ED=8A=B8=20=EC=B6=94=EA=B0=80&?= =?UTF-8?q?=EA=B3=BC=EC=A0=9C=EA=B9=8C=EC=A7=80=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Capstone_Design.sln | 24 ++++++ Drawing/Drawing.vcxproj | 139 ++++++++++++++++++++++++++++++++ Drawing/Drawing.vcxproj.filters | 22 +++++ Drawing/Drawing.zip | Bin 0 -> 26212 bytes Drawing/main.cpp | 66 +++++++++++++++ HelloCV/HelloCV.vcxproj | 10 ++- HelloCV/HelloCV.vcxproj.filters | 5 ++ HelloCV/main.cpp | 2 +- MatOp/MatOp.vcxproj | 4 + OPENCV4110_debug.props | 18 +++++ OPENCV4110_release.props | 18 +++++ Point_Class/Point_Class.vcxproj | 7 +- Video/Video.vcxproj | 139 ++++++++++++++++++++++++++++++++ Video/Video.vcxproj.filters | 22 +++++ Video/main.cpp | 58 +++++++++++++ 15 files changed, 527 insertions(+), 7 deletions(-) create mode 100644 Drawing/Drawing.vcxproj create mode 100644 Drawing/Drawing.vcxproj.filters create mode 100644 Drawing/Drawing.zip create mode 100644 Drawing/main.cpp create mode 100644 OPENCV4110_debug.props create mode 100644 OPENCV4110_release.props create mode 100644 Video/Video.vcxproj create mode 100644 Video/Video.vcxproj.filters create mode 100644 Video/main.cpp diff --git a/Capstone_Design.sln b/Capstone_Design.sln index 0c47250..cc8f0ad 100644 --- a/Capstone_Design.sln +++ b/Capstone_Design.sln @@ -17,6 +17,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HelloWorld", "HelloWorld\He EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MatOp", "MatOp\MatOp.vcxproj", "{284ABC4B-82D9-4808-8E18-E6F7A1D05563}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ch04", "ch04", "{6AD5DB3F-FAAC-4D79-9B5C-52AF61E2E052}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Video", "Video\Video.vcxproj", "{67BA8C21-12CB-440F-998D-E0DFF7B04DDF}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Drawing", "Drawing\Drawing.vcxproj", "{27CCD2CA-F740-43F5-8740-B30E3A2840C1}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -57,6 +63,22 @@ Global {284ABC4B-82D9-4808-8E18-E6F7A1D05563}.Release|x64.Build.0 = Release|x64 {284ABC4B-82D9-4808-8E18-E6F7A1D05563}.Release|x86.ActiveCfg = Release|Win32 {284ABC4B-82D9-4808-8E18-E6F7A1D05563}.Release|x86.Build.0 = Release|Win32 + {67BA8C21-12CB-440F-998D-E0DFF7B04DDF}.Debug|x64.ActiveCfg = Debug|x64 + {67BA8C21-12CB-440F-998D-E0DFF7B04DDF}.Debug|x64.Build.0 = Debug|x64 + {67BA8C21-12CB-440F-998D-E0DFF7B04DDF}.Debug|x86.ActiveCfg = Debug|Win32 + {67BA8C21-12CB-440F-998D-E0DFF7B04DDF}.Debug|x86.Build.0 = Debug|Win32 + {67BA8C21-12CB-440F-998D-E0DFF7B04DDF}.Release|x64.ActiveCfg = Release|x64 + {67BA8C21-12CB-440F-998D-E0DFF7B04DDF}.Release|x64.Build.0 = Release|x64 + {67BA8C21-12CB-440F-998D-E0DFF7B04DDF}.Release|x86.ActiveCfg = Release|Win32 + {67BA8C21-12CB-440F-998D-E0DFF7B04DDF}.Release|x86.Build.0 = Release|Win32 + {27CCD2CA-F740-43F5-8740-B30E3A2840C1}.Debug|x64.ActiveCfg = Debug|x64 + {27CCD2CA-F740-43F5-8740-B30E3A2840C1}.Debug|x64.Build.0 = Debug|x64 + {27CCD2CA-F740-43F5-8740-B30E3A2840C1}.Debug|x86.ActiveCfg = Debug|Win32 + {27CCD2CA-F740-43F5-8740-B30E3A2840C1}.Debug|x86.Build.0 = Debug|Win32 + {27CCD2CA-F740-43F5-8740-B30E3A2840C1}.Release|x64.ActiveCfg = Release|x64 + {27CCD2CA-F740-43F5-8740-B30E3A2840C1}.Release|x64.Build.0 = Release|x64 + {27CCD2CA-F740-43F5-8740-B30E3A2840C1}.Release|x86.ActiveCfg = Release|Win32 + {27CCD2CA-F740-43F5-8740-B30E3A2840C1}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -66,6 +88,8 @@ Global {9466991C-83CD-4753-90EB-A20C12368EAC} = {C8D5274F-AC00-46C7-1F8D-E88E81087A52} {682942EC-3BD1-4759-A9A4-3089C2EEC799} = {C8D5274F-AC00-46C7-1F8D-E88E81087A52} {284ABC4B-82D9-4808-8E18-E6F7A1D05563} = {5A922B9F-8CAA-418C-9D2A-C2F26CCF7059} + {67BA8C21-12CB-440F-998D-E0DFF7B04DDF} = {6AD5DB3F-FAAC-4D79-9B5C-52AF61E2E052} + {27CCD2CA-F740-43F5-8740-B30E3A2840C1} = {6AD5DB3F-FAAC-4D79-9B5C-52AF61E2E052} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E1A0C3F4-F16D-4626-86CE-D8484C0C776D} diff --git a/Drawing/Drawing.vcxproj b/Drawing/Drawing.vcxproj new file mode 100644 index 0000000..6ad2af6 --- /dev/null +++ b/Drawing/Drawing.vcxproj @@ -0,0 +1,139 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 17.0 + Win32Proj + {27ccd2ca-f740-43f5-8740-b30e3a2840c1} + Drawing + 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/Drawing/Drawing.vcxproj.filters b/Drawing/Drawing.vcxproj.filters new file mode 100644 index 0000000..2c1b3dc --- /dev/null +++ b/Drawing/Drawing.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/Drawing/Drawing.zip b/Drawing/Drawing.zip new file mode 100644 index 0000000000000000000000000000000000000000..51c5768fde160ac4def6bfc731968fb28f2b9c65 GIT binary patch literal 26212 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 +#include "opencv2/opencv.hpp" + +int drawLines(); +int drawPolys(); + +int main() { + return drawPolys(); +} + +int drawLines() { + cv::Mat img(400, 400, CV_8UC3, cv::Scalar(255, 255, 255)); + + cv::line(img, cv::Point(50, 50), cv::Point(200, 50), cv::Scalar(0, 0, 255)); + cv::line(img, cv::Point(50, 100), cv::Point(200, 100), cv::Scalar(255, 0, 255), 3); + cv::line(img, cv::Point(50, 150), cv::Point(200, 150), cv::Scalar(255, 0, 0), 10); + + cv::line(img, cv::Point(250, 50), cv::Point(350, 100), cv::Scalar(0, 0, 255), 1, cv::LINE_4); + cv::line(img, cv::Point(250, 70), cv::Point(350, 120), cv::Scalar(255, 0, 255), 1, cv::LINE_8); + cv::line(img, cv::Point(250, 90), cv::Point(350, 140), cv::Scalar(255, 0, 0), 1, cv::LINE_AA); + + cv::arrowedLine(img, cv::Point(50, 200), cv::Point(150, 200), cv::Scalar(0, 0, 255), 1); + cv::arrowedLine(img, cv::Point(50, 250), cv::Point(350, 250), cv::Scalar(255, 0, 255), 1); + cv::arrowedLine(img, cv::Point(50, 300), cv::Point(350, 300), cv::Scalar(255, 0, 0), 1, cv::LINE_8, 0, 0.05); + + cv::drawMarker(img, cv::Point(50, 350), cv::Scalar(0, 0, 255), cv::MARKER_CROSS); + cv::drawMarker(img, cv::Point(100, 350), cv::Scalar(0, 0, 255), cv::MARKER_TILTED_CROSS); + cv::drawMarker(img, cv::Point(150, 350), cv::Scalar(0, 0, 255), cv::MARKER_STAR); + cv::drawMarker(img, cv::Point(200, 350), cv::Scalar(0, 0, 255), cv::MARKER_DIAMOND); + cv::drawMarker(img, cv::Point(250, 350), cv::Scalar(0, 0, 255), cv::MARKER_SQUARE); + cv::drawMarker(img, cv::Point(300, 350), cv::Scalar(0, 0, 255), cv::MARKER_TRIANGLE_UP); + cv::drawMarker(img, cv::Point(350, 350), cv::Scalar(0, 0, 255), cv::MARKER_TRIANGLE_DOWN); + + cv::imshow("img", img); + cv::waitKey(0); + + cv::destroyAllWindows(); + return 0; +} + +int drawPolys() { + cv::Mat img(400, 400, CV_8UC3, cv::Scalar(255, 255, 255)); + + cv::rectangle(img, cv::Rect(50, 50, 100, 50), cv::Scalar(0, 0, 255), 2); + cv::rectangle(img, cv::Rect(50, 150, 100, 50), cv::Scalar(0, 0, 128), -1); + + cv::circle(img, cv::Point(300, 120), 30, cv::Scalar(255, 255, 0), -1, cv::LINE_AA); + cv::circle(img, cv::Point(300, 120), 60, cv::Scalar(255, 0, 0), 3, cv::LINE_AA); + + cv::ellipse(img, cv::Point(120, 300), cv::Size(60, 30), 20, 0, 270, cv::Scalar(255, 255, 0), -1, cv::LINE_AA); + cv::ellipse(img, cv::Point(120, 300), cv::Size(100, 50), 20, 0, 360, cv::Scalar(0, 255, 0), 2, cv::LINE_AA); + + std::vector pts; + pts.push_back(cv::Point(250, 250)); pts.push_back(cv::Point(300, 250)); + pts.push_back(cv::Point(300, 300)); pts.push_back(cv::Point(350, 300)); + pts.push_back(cv::Point(350, 350)); pts.push_back(cv::Point(250, 350)); + cv::polylines(img, pts, true, cv::Scalar(255, 0, 255), 2); + + cv::putText(img, "KimMinSu 20518009", cv::Point(50, 30), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(255, 0, 255), 2, cv::LINE_AA); + + cv::imshow("img", img); + cv::waitKey(0); + + cv::destroyAllWindows(); + return 0; +} \ No newline at end of file diff --git a/HelloCV/HelloCV.vcxproj b/HelloCV/HelloCV.vcxproj index 9d1dc11..799d0a2 100644 --- a/HelloCV/HelloCV.vcxproj +++ b/HelloCV/HelloCV.vcxproj @@ -59,15 +59,19 @@ + + + + @@ -106,13 +110,10 @@ true _DEBUG;_CONSOLE;%(PreprocessorDefinitions) true - $(OPENCV_DIR)\include Console true - opencv_world4110d.lib;%(AdditionalDependencies) - $(OPENCV_DIR)\x64\vc16\lib;%(AdditionalLibraryDirectories) @@ -137,6 +138,9 @@ + + + diff --git a/HelloCV/HelloCV.vcxproj.filters b/HelloCV/HelloCV.vcxproj.filters index 2c1b3dc..1d6af50 100644 --- a/HelloCV/HelloCV.vcxproj.filters +++ b/HelloCV/HelloCV.vcxproj.filters @@ -19,4 +19,9 @@ 소스 파일 + + + 리소스 파일 + + \ No newline at end of file diff --git a/HelloCV/main.cpp b/HelloCV/main.cpp index e96a248..a34d6cd 100644 --- a/HelloCV/main.cpp +++ b/HelloCV/main.cpp @@ -5,7 +5,7 @@ int main(int argv, char* argc[]) { std::cout << "Hello, OpenCV " << CV_VERSION << std::endl; cv::Mat img; - img = cv::imread("c:\\coding\\images\\lenna.bmp"); + img = cv::imread("..\\resources\\images\\lenna.bmp"); if (img.empty()) { std::cerr << "Image load failed!" << std::endl; diff --git a/MatOp/MatOp.vcxproj b/MatOp/MatOp.vcxproj index 7e09d89..cd537bd 100644 --- a/MatOp/MatOp.vcxproj +++ b/MatOp/MatOp.vcxproj @@ -59,15 +59,19 @@ + + + + diff --git a/OPENCV4110_debug.props b/OPENCV4110_debug.props new file mode 100644 index 0000000..7fab32a --- /dev/null +++ b/OPENCV4110_debug.props @@ -0,0 +1,18 @@ + + + + + + <_PropertySheetDisplayName>OPENCV4110_debug + + + + $(OPENCV_DIR)\include;%(AdditionalIncludeDirectories) + + + $(OPENCV_DIR)\x64\vc16\lib;%(AdditionalLibraryDirectories) + opencv_world4110d.lib;%(AdditionalDependencies) + + + + \ No newline at end of file diff --git a/OPENCV4110_release.props b/OPENCV4110_release.props new file mode 100644 index 0000000..1cf6f71 --- /dev/null +++ b/OPENCV4110_release.props @@ -0,0 +1,18 @@ + + + + + + <_PropertySheetDisplayName>OPENCV4110_release + + + + $(OPENCV_DIR)\include;%(AdditionalIncludeDirectories) + + + $(OPENCV_DIR)\x64\vc16\lib;%(AdditionalLibraryDirectories) + opencv_world4110.lib;%(AdditionalDependencies) + + + + \ No newline at end of file diff --git a/Point_Class/Point_Class.vcxproj b/Point_Class/Point_Class.vcxproj index 50c26f1..249d574 100644 --- a/Point_Class/Point_Class.vcxproj +++ b/Point_Class/Point_Class.vcxproj @@ -59,15 +59,19 @@ + + + + @@ -104,13 +108,10 @@ true _DEBUG;_CONSOLE;%(PreprocessorDefinitions) true - $(OPENCV_DIR)\include Console true - $(OPENCV_DIR)\x64\vc16\lib;%(AdditionalLibraryDirectories) - opencv_world4110d.lib;%(AdditionalDependencies) diff --git a/Video/Video.vcxproj b/Video/Video.vcxproj new file mode 100644 index 0000000..68f6839 --- /dev/null +++ b/Video/Video.vcxproj @@ -0,0 +1,139 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 17.0 + Win32Proj + {67ba8c21-12cb-440f-998d-e0dff7b04ddf} + Video + 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/Video/Video.vcxproj.filters b/Video/Video.vcxproj.filters new file mode 100644 index 0000000..2c1b3dc --- /dev/null +++ b/Video/Video.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/Video/main.cpp b/Video/main.cpp new file mode 100644 index 0000000..cea6ee0 --- /dev/null +++ b/Video/main.cpp @@ -0,0 +1,58 @@ +#include +#include "opencv2/opencv.hpp" + +int camera_in(); +int camera_in_video_out(); + +int main() { + return camera_in_video_out(); +} + +int camera_in() { + cv::VideoCapture camera(0); + if (!camera.isOpened()) { + std::cerr << "camera.isopened()" << std::endl; + return 1; + } + cv::Mat img; + double fps = 1000 / camera.get(cv::VideoCaptureProperties::CAP_PROP_FPS); + std::cout << "\n\n" << fps << "\n\n"; + while (true) { + camera >> img; + if (img.empty()) { + std::cerr << "img.empty()" << std::endl; + return 1; + } + cv::imshow("img", img); + if (cv::waitKey(fps) == 27) + break; + } + return 0; +} + +int camera_in_video_out() { + cv::VideoCapture camera(0); + if (!camera.isOpened()) { + std::cerr << "camera.isopened()" << std::endl; + return 1; + } + cv::Mat img; + int w = cvRound(camera.get(cv::VideoCaptureProperties::CAP_PROP_FRAME_WIDTH)); + int h = cvRound(camera.get(cv::VideoCaptureProperties::CAP_PROP_FRAME_HEIGHT)); + double fps = camera.get(cv::VideoCaptureProperties::CAP_PROP_FPS); + + cv::VideoWriter outputVideo("output.avi", cv::VideoWriter::fourcc('D', 'I', 'V', 'X'), fps, cv::Size(w, h)); + + while (true) { + camera >> img; + if (img.empty()) { + std::cerr << "img.empty()" << std::endl; + return 1; + } + outputVideo << ~img; + cv::imshow("img", img); + if (cv::waitKey(fps) == 27) + break; + } + return 0; +} \ No newline at end of file