diff --git a/Capstone_Design.sln b/Capstone_Design.sln
index cc8f0ad..619c014 100644
--- a/Capstone_Design.sln
+++ b/Capstone_Design.sln
@@ -9,19 +9,47 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ch02", "ch02", "{513A93F1-4
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ch03", "ch03", "{5A922B9F-8CAA-418C-9D2A-C2F26CCF7059}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Point_Class", "Point_Class\Point_Class.vcxproj", "{A18B353C-A08C-4EBE-92D6-2D280A16A6BB}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HelloCV", "HelloCV\HelloCV.vcxproj", "{9466991C-83CD-4753-90EB-A20C12368EAC}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HelloWorld", "HelloWorld\HelloWorld.vcxproj", "{682942EC-3BD1-4759-A9A4-3089C2EEC799}"
-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}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ch05", "ch05", "{8436DD5A-9627-44A0-BA75-7706F5190DD2}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Drawing", "Drawing\Drawing.vcxproj", "{27CCD2CA-F740-43F5-8740-B30E3A2840C1}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "brightness", "ch05\brightness\brightness.vcxproj", "{A9F00664-0673-4934-B51D-A141D9C211ED}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Drawing", "ch04\Drawing\Drawing.vcxproj", "{27CCD2CA-F740-43F5-8740-B30E3A2840C1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MatOp", "ch03\MatOp\MatOp.vcxproj", "{284ABC4B-82D9-4808-8E18-E6F7A1D05563}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Point_Class", "ch03\Point_Class\Point_Class.vcxproj", "{A18B353C-A08C-4EBE-92D6-2D280A16A6BB}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HelloCV", "ch01\HelloCV\HelloCV.vcxproj", "{9466991C-83CD-4753-90EB-A20C12368EAC}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HelloWorld", "ch01\HelloWorld\HelloWorld.vcxproj", "{682942EC-3BD1-4759-A9A4-3089C2EEC799}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "contrast", "ch05\contrast\contrast.vcxproj", "{926B8522-38E8-41E3-A358-D9D628DFF8A4}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "histogram", "ch05\histogram\histogram.vcxproj", "{D0C81788-4531-4E50-A2DE-7ADD77039FCE}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Video", "ch04\Video\Video.vcxproj", "{67BA8C21-12CB-440F-998D-E0DFF7B04DDF}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ch06", "ch06", "{32163192-2AEE-4AF4-B246-66D99D6C131F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Arithmetic", "ch06\Arithmetic\Arithmetic.vcxproj", "{69A9CD92-339E-4CEC-8427-3A71197437D4}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "logical", "ch06\logical\logical.vcxproj", "{8E7C00AE-B124-4C7E-848F-F85838AFC69A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "filter", "cn06\filter\filter.vcxproj", "{8219467F-93DF-4080-8452-97E1EC422D8B}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ch07", "ch07", "{E0A91F3E-0B54-4785-AB66-727A7EE1E15B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "blurring", "ch07\blurring\blurring.vcxproj", "{61942C1C-14CA-49A7-B89A-4C6A8996CA6D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sharpen", "ch07\sharpen\sharpen.vcxproj", "{A871F9D8-2DD0-4B01-A304-E738968313F2}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "noise", "ch07\noise\noise.vcxproj", "{380222EF-FFE1-445F-B409-1DD866DF1ED9}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Homework", "Homework", "{E583E257-9FCE-4A4B-A554-8514F982D1BF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "noise_denoise", "Homework\noise_denoise\noise_denoise.vcxproj", "{C91F6DA7-8B51-4630-9340-D3643FE0531E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -31,6 +59,30 @@ Global
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A9F00664-0673-4934-B51D-A141D9C211ED}.Debug|x64.ActiveCfg = Debug|x64
+ {A9F00664-0673-4934-B51D-A141D9C211ED}.Debug|x64.Build.0 = Debug|x64
+ {A9F00664-0673-4934-B51D-A141D9C211ED}.Debug|x86.ActiveCfg = Debug|Win32
+ {A9F00664-0673-4934-B51D-A141D9C211ED}.Debug|x86.Build.0 = Debug|Win32
+ {A9F00664-0673-4934-B51D-A141D9C211ED}.Release|x64.ActiveCfg = Release|x64
+ {A9F00664-0673-4934-B51D-A141D9C211ED}.Release|x64.Build.0 = Release|x64
+ {A9F00664-0673-4934-B51D-A141D9C211ED}.Release|x86.ActiveCfg = Release|Win32
+ {A9F00664-0673-4934-B51D-A141D9C211ED}.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
+ {284ABC4B-82D9-4808-8E18-E6F7A1D05563}.Debug|x64.ActiveCfg = Debug|x64
+ {284ABC4B-82D9-4808-8E18-E6F7A1D05563}.Debug|x64.Build.0 = Debug|x64
+ {284ABC4B-82D9-4808-8E18-E6F7A1D05563}.Debug|x86.ActiveCfg = Debug|Win32
+ {284ABC4B-82D9-4808-8E18-E6F7A1D05563}.Debug|x86.Build.0 = Debug|Win32
+ {284ABC4B-82D9-4808-8E18-E6F7A1D05563}.Release|x64.ActiveCfg = Release|x64
+ {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
{A18B353C-A08C-4EBE-92D6-2D280A16A6BB}.Debug|x64.ActiveCfg = Debug|x64
{A18B353C-A08C-4EBE-92D6-2D280A16A6BB}.Debug|x64.Build.0 = Debug|x64
{A18B353C-A08C-4EBE-92D6-2D280A16A6BB}.Debug|x86.ActiveCfg = Debug|Win32
@@ -55,14 +107,22 @@ Global
{682942EC-3BD1-4759-A9A4-3089C2EEC799}.Release|x64.Build.0 = Release|x64
{682942EC-3BD1-4759-A9A4-3089C2EEC799}.Release|x86.ActiveCfg = Release|Win32
{682942EC-3BD1-4759-A9A4-3089C2EEC799}.Release|x86.Build.0 = Release|Win32
- {284ABC4B-82D9-4808-8E18-E6F7A1D05563}.Debug|x64.ActiveCfg = Debug|x64
- {284ABC4B-82D9-4808-8E18-E6F7A1D05563}.Debug|x64.Build.0 = Debug|x64
- {284ABC4B-82D9-4808-8E18-E6F7A1D05563}.Debug|x86.ActiveCfg = Debug|Win32
- {284ABC4B-82D9-4808-8E18-E6F7A1D05563}.Debug|x86.Build.0 = Debug|Win32
- {284ABC4B-82D9-4808-8E18-E6F7A1D05563}.Release|x64.ActiveCfg = Release|x64
- {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
+ {926B8522-38E8-41E3-A358-D9D628DFF8A4}.Debug|x64.ActiveCfg = Debug|x64
+ {926B8522-38E8-41E3-A358-D9D628DFF8A4}.Debug|x64.Build.0 = Debug|x64
+ {926B8522-38E8-41E3-A358-D9D628DFF8A4}.Debug|x86.ActiveCfg = Debug|Win32
+ {926B8522-38E8-41E3-A358-D9D628DFF8A4}.Debug|x86.Build.0 = Debug|Win32
+ {926B8522-38E8-41E3-A358-D9D628DFF8A4}.Release|x64.ActiveCfg = Release|x64
+ {926B8522-38E8-41E3-A358-D9D628DFF8A4}.Release|x64.Build.0 = Release|x64
+ {926B8522-38E8-41E3-A358-D9D628DFF8A4}.Release|x86.ActiveCfg = Release|Win32
+ {926B8522-38E8-41E3-A358-D9D628DFF8A4}.Release|x86.Build.0 = Release|Win32
+ {D0C81788-4531-4E50-A2DE-7ADD77039FCE}.Debug|x64.ActiveCfg = Debug|x64
+ {D0C81788-4531-4E50-A2DE-7ADD77039FCE}.Debug|x64.Build.0 = Debug|x64
+ {D0C81788-4531-4E50-A2DE-7ADD77039FCE}.Debug|x86.ActiveCfg = Debug|Win32
+ {D0C81788-4531-4E50-A2DE-7ADD77039FCE}.Debug|x86.Build.0 = Debug|Win32
+ {D0C81788-4531-4E50-A2DE-7ADD77039FCE}.Release|x64.ActiveCfg = Release|x64
+ {D0C81788-4531-4E50-A2DE-7ADD77039FCE}.Release|x64.Build.0 = Release|x64
+ {D0C81788-4531-4E50-A2DE-7ADD77039FCE}.Release|x86.ActiveCfg = Release|Win32
+ {D0C81788-4531-4E50-A2DE-7ADD77039FCE}.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
@@ -71,25 +131,83 @@ Global
{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
+ {69A9CD92-339E-4CEC-8427-3A71197437D4}.Debug|x64.ActiveCfg = Debug|x64
+ {69A9CD92-339E-4CEC-8427-3A71197437D4}.Debug|x64.Build.0 = Debug|x64
+ {69A9CD92-339E-4CEC-8427-3A71197437D4}.Debug|x86.ActiveCfg = Debug|Win32
+ {69A9CD92-339E-4CEC-8427-3A71197437D4}.Debug|x86.Build.0 = Debug|Win32
+ {69A9CD92-339E-4CEC-8427-3A71197437D4}.Release|x64.ActiveCfg = Release|x64
+ {69A9CD92-339E-4CEC-8427-3A71197437D4}.Release|x64.Build.0 = Release|x64
+ {69A9CD92-339E-4CEC-8427-3A71197437D4}.Release|x86.ActiveCfg = Release|Win32
+ {69A9CD92-339E-4CEC-8427-3A71197437D4}.Release|x86.Build.0 = Release|Win32
+ {8E7C00AE-B124-4C7E-848F-F85838AFC69A}.Debug|x64.ActiveCfg = Debug|x64
+ {8E7C00AE-B124-4C7E-848F-F85838AFC69A}.Debug|x64.Build.0 = Debug|x64
+ {8E7C00AE-B124-4C7E-848F-F85838AFC69A}.Debug|x86.ActiveCfg = Debug|Win32
+ {8E7C00AE-B124-4C7E-848F-F85838AFC69A}.Debug|x86.Build.0 = Debug|Win32
+ {8E7C00AE-B124-4C7E-848F-F85838AFC69A}.Release|x64.ActiveCfg = Release|x64
+ {8E7C00AE-B124-4C7E-848F-F85838AFC69A}.Release|x64.Build.0 = Release|x64
+ {8E7C00AE-B124-4C7E-848F-F85838AFC69A}.Release|x86.ActiveCfg = Release|Win32
+ {8E7C00AE-B124-4C7E-848F-F85838AFC69A}.Release|x86.Build.0 = Release|Win32
+ {8219467F-93DF-4080-8452-97E1EC422D8B}.Debug|x64.ActiveCfg = Debug|x64
+ {8219467F-93DF-4080-8452-97E1EC422D8B}.Debug|x64.Build.0 = Debug|x64
+ {8219467F-93DF-4080-8452-97E1EC422D8B}.Debug|x86.ActiveCfg = Debug|Win32
+ {8219467F-93DF-4080-8452-97E1EC422D8B}.Debug|x86.Build.0 = Debug|Win32
+ {8219467F-93DF-4080-8452-97E1EC422D8B}.Release|x64.ActiveCfg = Release|x64
+ {8219467F-93DF-4080-8452-97E1EC422D8B}.Release|x64.Build.0 = Release|x64
+ {8219467F-93DF-4080-8452-97E1EC422D8B}.Release|x86.ActiveCfg = Release|Win32
+ {8219467F-93DF-4080-8452-97E1EC422D8B}.Release|x86.Build.0 = Release|Win32
+ {61942C1C-14CA-49A7-B89A-4C6A8996CA6D}.Debug|x64.ActiveCfg = Debug|x64
+ {61942C1C-14CA-49A7-B89A-4C6A8996CA6D}.Debug|x64.Build.0 = Debug|x64
+ {61942C1C-14CA-49A7-B89A-4C6A8996CA6D}.Debug|x86.ActiveCfg = Debug|Win32
+ {61942C1C-14CA-49A7-B89A-4C6A8996CA6D}.Debug|x86.Build.0 = Debug|Win32
+ {61942C1C-14CA-49A7-B89A-4C6A8996CA6D}.Release|x64.ActiveCfg = Release|x64
+ {61942C1C-14CA-49A7-B89A-4C6A8996CA6D}.Release|x64.Build.0 = Release|x64
+ {61942C1C-14CA-49A7-B89A-4C6A8996CA6D}.Release|x86.ActiveCfg = Release|Win32
+ {61942C1C-14CA-49A7-B89A-4C6A8996CA6D}.Release|x86.Build.0 = Release|Win32
+ {A871F9D8-2DD0-4B01-A304-E738968313F2}.Debug|x64.ActiveCfg = Debug|x64
+ {A871F9D8-2DD0-4B01-A304-E738968313F2}.Debug|x64.Build.0 = Debug|x64
+ {A871F9D8-2DD0-4B01-A304-E738968313F2}.Debug|x86.ActiveCfg = Debug|Win32
+ {A871F9D8-2DD0-4B01-A304-E738968313F2}.Debug|x86.Build.0 = Debug|Win32
+ {A871F9D8-2DD0-4B01-A304-E738968313F2}.Release|x64.ActiveCfg = Release|x64
+ {A871F9D8-2DD0-4B01-A304-E738968313F2}.Release|x64.Build.0 = Release|x64
+ {A871F9D8-2DD0-4B01-A304-E738968313F2}.Release|x86.ActiveCfg = Release|Win32
+ {A871F9D8-2DD0-4B01-A304-E738968313F2}.Release|x86.Build.0 = Release|Win32
+ {380222EF-FFE1-445F-B409-1DD866DF1ED9}.Debug|x64.ActiveCfg = Debug|x64
+ {380222EF-FFE1-445F-B409-1DD866DF1ED9}.Debug|x64.Build.0 = Debug|x64
+ {380222EF-FFE1-445F-B409-1DD866DF1ED9}.Debug|x86.ActiveCfg = Debug|Win32
+ {380222EF-FFE1-445F-B409-1DD866DF1ED9}.Debug|x86.Build.0 = Debug|Win32
+ {380222EF-FFE1-445F-B409-1DD866DF1ED9}.Release|x64.ActiveCfg = Release|x64
+ {380222EF-FFE1-445F-B409-1DD866DF1ED9}.Release|x64.Build.0 = Release|x64
+ {380222EF-FFE1-445F-B409-1DD866DF1ED9}.Release|x86.ActiveCfg = Release|Win32
+ {380222EF-FFE1-445F-B409-1DD866DF1ED9}.Release|x86.Build.0 = Release|Win32
+ {C91F6DA7-8B51-4630-9340-D3643FE0531E}.Debug|x64.ActiveCfg = Debug|x64
+ {C91F6DA7-8B51-4630-9340-D3643FE0531E}.Debug|x64.Build.0 = Debug|x64
+ {C91F6DA7-8B51-4630-9340-D3643FE0531E}.Debug|x86.ActiveCfg = Debug|Win32
+ {C91F6DA7-8B51-4630-9340-D3643FE0531E}.Debug|x86.Build.0 = Debug|Win32
+ {C91F6DA7-8B51-4630-9340-D3643FE0531E}.Release|x64.ActiveCfg = Release|x64
+ {C91F6DA7-8B51-4630-9340-D3643FE0531E}.Release|x64.Build.0 = Release|x64
+ {C91F6DA7-8B51-4630-9340-D3643FE0531E}.Release|x86.ActiveCfg = Release|Win32
+ {C91F6DA7-8B51-4630-9340-D3643FE0531E}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
+ {A9F00664-0673-4934-B51D-A141D9C211ED} = {8436DD5A-9627-44A0-BA75-7706F5190DD2}
+ {27CCD2CA-F740-43F5-8740-B30E3A2840C1} = {6AD5DB3F-FAAC-4D79-9B5C-52AF61E2E052}
+ {284ABC4B-82D9-4808-8E18-E6F7A1D05563} = {5A922B9F-8CAA-418C-9D2A-C2F26CCF7059}
{A18B353C-A08C-4EBE-92D6-2D280A16A6BB} = {5A922B9F-8CAA-418C-9D2A-C2F26CCF7059}
{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}
+ {926B8522-38E8-41E3-A358-D9D628DFF8A4} = {8436DD5A-9627-44A0-BA75-7706F5190DD2}
+ {D0C81788-4531-4E50-A2DE-7ADD77039FCE} = {8436DD5A-9627-44A0-BA75-7706F5190DD2}
{67BA8C21-12CB-440F-998D-E0DFF7B04DDF} = {6AD5DB3F-FAAC-4D79-9B5C-52AF61E2E052}
- {27CCD2CA-F740-43F5-8740-B30E3A2840C1} = {6AD5DB3F-FAAC-4D79-9B5C-52AF61E2E052}
+ {69A9CD92-339E-4CEC-8427-3A71197437D4} = {32163192-2AEE-4AF4-B246-66D99D6C131F}
+ {8E7C00AE-B124-4C7E-848F-F85838AFC69A} = {32163192-2AEE-4AF4-B246-66D99D6C131F}
+ {8219467F-93DF-4080-8452-97E1EC422D8B} = {32163192-2AEE-4AF4-B246-66D99D6C131F}
+ {61942C1C-14CA-49A7-B89A-4C6A8996CA6D} = {E0A91F3E-0B54-4785-AB66-727A7EE1E15B}
+ {A871F9D8-2DD0-4B01-A304-E738968313F2} = {E0A91F3E-0B54-4785-AB66-727A7EE1E15B}
+ {380222EF-FFE1-445F-B409-1DD866DF1ED9} = {E0A91F3E-0B54-4785-AB66-727A7EE1E15B}
+ {C91F6DA7-8B51-4630-9340-D3643FE0531E} = {E583E257-9FCE-4A4B-A554-8514F982D1BF}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {E1A0C3F4-F16D-4626-86CE-D8484C0C776D}
diff --git a/Drawing/Drawing.zip b/Drawing/Drawing.zip
deleted file mode 100644
index 51c5768..0000000
Binary files a/Drawing/Drawing.zip and /dev/null differ
diff --git a/Homework/noise_denoise/noise_denoise.vcxproj b/Homework/noise_denoise/noise_denoise.vcxproj
new file mode 100644
index 0000000..35c27eb
--- /dev/null
+++ b/Homework/noise_denoise/noise_denoise.vcxproj
@@ -0,0 +1,138 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {c91f6da7-8b51-4630-9340-d3643fe0531e}
+ noisedenoise
+ 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/noise_denoise/noise_denoise.vcxproj.filters b/Homework/noise_denoise/noise_denoise.vcxproj.filters
new file mode 100644
index 0000000..493ccf6
--- /dev/null
+++ b/Homework/noise_denoise/noise_denoise.vcxproj.filters
@@ -0,0 +1,17 @@
+
+
+
+
+ {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/HelloCV/HelloCV.vcxproj b/ch01/HelloCV/HelloCV.vcxproj
similarity index 96%
rename from HelloCV/HelloCV.vcxproj
rename to ch01/HelloCV/HelloCV.vcxproj
index 799d0a2..1196409 100644
--- a/HelloCV/HelloCV.vcxproj
+++ b/ch01/HelloCV/HelloCV.vcxproj
@@ -59,19 +59,19 @@
-
+
-
+
-
+
-
+
diff --git a/HelloCV/HelloCV.vcxproj.filters b/ch01/HelloCV/HelloCV.vcxproj.filters
similarity index 100%
rename from HelloCV/HelloCV.vcxproj.filters
rename to ch01/HelloCV/HelloCV.vcxproj.filters
diff --git a/HelloCV/main.cpp b/ch01/HelloCV/main.cpp
similarity index 84%
rename from HelloCV/main.cpp
rename to ch01/HelloCV/main.cpp
index a34d6cd..aa21596 100644
--- a/HelloCV/main.cpp
+++ b/ch01/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("..\\resources\\images\\lenna.bmp");
+ img = cv::imread("..\\..\\resources\\images\\lenna.bmp");
if (img.empty()) {
std::cerr << "Image load failed!" << std::endl;
diff --git a/HelloCV/main2.cpp b/ch01/HelloCV/main2.cpp
similarity index 100%
rename from HelloCV/main2.cpp
rename to ch01/HelloCV/main2.cpp
diff --git a/HelloWorld/HelloWorld.vcxproj b/ch01/HelloWorld/HelloWorld.vcxproj
similarity index 100%
rename from HelloWorld/HelloWorld.vcxproj
rename to ch01/HelloWorld/HelloWorld.vcxproj
diff --git a/HelloWorld/HelloWorld.vcxproj.filters b/ch01/HelloWorld/HelloWorld.vcxproj.filters
similarity index 100%
rename from HelloWorld/HelloWorld.vcxproj.filters
rename to ch01/HelloWorld/HelloWorld.vcxproj.filters
diff --git a/HelloWorld/main.cpp b/ch01/HelloWorld/main.cpp
similarity index 100%
rename from HelloWorld/main.cpp
rename to ch01/HelloWorld/main.cpp
diff --git a/MatOp/MatOp.vcxproj b/ch03/MatOp/MatOp.vcxproj
similarity index 97%
rename from MatOp/MatOp.vcxproj
rename to ch03/MatOp/MatOp.vcxproj
index cd537bd..fae819f 100644
--- a/MatOp/MatOp.vcxproj
+++ b/ch03/MatOp/MatOp.vcxproj
@@ -59,19 +59,19 @@
-
+
-
+
-
+
-
+
diff --git a/MatOp/MatOp.vcxproj.filters b/ch03/MatOp/MatOp.vcxproj.filters
similarity index 100%
rename from MatOp/MatOp.vcxproj.filters
rename to ch03/MatOp/MatOp.vcxproj.filters
diff --git a/MatOp/main.cpp b/ch03/MatOp/main.cpp
similarity index 87%
rename from MatOp/main.cpp
rename to ch03/MatOp/main.cpp
index d6c0066..c690afb 100644
--- a/MatOp/main.cpp
+++ b/ch03/MatOp/main.cpp
@@ -12,7 +12,7 @@ int main() {
}
void MatOp2() {
- Mat img1 = imread("..\\resources\\images\\dog.bmp");
+ Mat img1 = imread("..\\..\\resources\\images\\dog.bmp");
Mat img2 = img1;
Mat img3;
img3 = img1;
@@ -34,7 +34,7 @@ void MatOp2() {
}
void MatOp3() {
- Mat img1 = imread("..\\resources\\images\\cat.bmp");
+ Mat img1 = imread("..\\..\\resources\\images\\cat.bmp");
if (img1.empty()) {
cerr << "Image load failed!" << endl;
diff --git a/Point_Class/Point_Class.vcxproj b/ch03/Point_Class/Point_Class.vcxproj
similarity index 96%
rename from Point_Class/Point_Class.vcxproj
rename to ch03/Point_Class/Point_Class.vcxproj
index 249d574..4423d8d 100644
--- a/Point_Class/Point_Class.vcxproj
+++ b/ch03/Point_Class/Point_Class.vcxproj
@@ -59,19 +59,19 @@
-
+
-
+
-
+
-
+
diff --git a/Point_Class/Point_Class.vcxproj.filters b/ch03/Point_Class/Point_Class.vcxproj.filters
similarity index 100%
rename from Point_Class/Point_Class.vcxproj.filters
rename to ch03/Point_Class/Point_Class.vcxproj.filters
diff --git a/Point_Class/main.cpp b/ch03/Point_Class/main.cpp
similarity index 100%
rename from Point_Class/main.cpp
rename to ch03/Point_Class/main.cpp
diff --git a/Drawing/Drawing.vcxproj b/ch04/Drawing/Drawing.vcxproj
similarity index 96%
rename from Drawing/Drawing.vcxproj
rename to ch04/Drawing/Drawing.vcxproj
index 6ad2af6..dafd279 100644
--- a/Drawing/Drawing.vcxproj
+++ b/ch04/Drawing/Drawing.vcxproj
@@ -59,19 +59,19 @@
-
+
-
+
-
+
-
+
diff --git a/Drawing/Drawing.vcxproj.filters b/ch04/Drawing/Drawing.vcxproj.filters
similarity index 100%
rename from Drawing/Drawing.vcxproj.filters
rename to ch04/Drawing/Drawing.vcxproj.filters
diff --git a/Drawing/main.cpp b/ch04/Drawing/main.cpp
similarity index 100%
rename from Drawing/main.cpp
rename to ch04/Drawing/main.cpp
diff --git a/Video/Video.vcxproj b/ch04/Video/Video.vcxproj
similarity index 96%
rename from Video/Video.vcxproj
rename to ch04/Video/Video.vcxproj
index 68f6839..1e2af41 100644
--- a/Video/Video.vcxproj
+++ b/ch04/Video/Video.vcxproj
@@ -59,19 +59,19 @@
-
+
-
+
-
+
-
+
diff --git a/Video/Video.vcxproj.filters b/ch04/Video/Video.vcxproj.filters
similarity index 100%
rename from Video/Video.vcxproj.filters
rename to ch04/Video/Video.vcxproj.filters
diff --git a/Video/main.cpp b/ch04/Video/main.cpp
similarity index 100%
rename from Video/main.cpp
rename to ch04/Video/main.cpp
diff --git a/ch05/brightness/brightness.vcxproj b/ch05/brightness/brightness.vcxproj
new file mode 100644
index 0000000..a685e4e
--- /dev/null
+++ b/ch05/brightness/brightness.vcxproj
@@ -0,0 +1,142 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {a9f00664-0673-4934-b51d-a141d9c211ed}
+ brightness
+ 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/ch05/brightness/brightness.vcxproj.filters b/ch05/brightness/brightness.vcxproj.filters
new file mode 100644
index 0000000..77c1a27
--- /dev/null
+++ b/ch05/brightness/brightness.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/ch05/brightness/main.cpp b/ch05/brightness/main.cpp
new file mode 100644
index 0000000..c7654e6
--- /dev/null
+++ b/ch05/brightness/main.cpp
@@ -0,0 +1,111 @@
+#include
+#include "opencv2/opencv.hpp"
+
+using namespace std;
+using namespace cv;
+
+int brightness1();
+int brightness2();
+int brightness3();
+int brightness4();
+int mosaic();
+
+int main() {
+ return brightness4();
+}
+
+int brightness1() {
+ Mat src = imread("..\\..\\resources\\images\\lenna.bmp", IMREAD_GRAYSCALE);
+ if (src.empty()) {
+ cerr << "imread()" << endl;
+ return 1;
+ }
+ Mat dst = src + 100;
+
+ imshow("src", src);
+ imshow("dst", dst);
+ waitKey();
+ destroyAllWindows();
+ return 0;
+}
+
+int brightness2() {
+ Mat src = imread("..\\..\\resources\\images\\lenna.bmp", IMREAD_GRAYSCALE);
+ if (src.empty()) {
+ cerr << "imread()" << endl;
+ return 1;
+ }
+ Mat dst(src.rows, src.cols, src.type());
+
+ for (int j = 0; j < src.rows; j++) {
+ for (int i = 0; i < src.cols; i++) {
+ dst.at(j, i) = src.at(j, i) + 100;
+ }
+ }
+
+ imshow("src", src);
+ imshow("dst", dst);
+ waitKey();
+ destroyAllWindows();
+ return 0;
+}
+
+int brightness3() {
+ Mat src = imread("..\\..\\resources\\images\\lenna.bmp", IMREAD_GRAYSCALE);
+ if (src.empty()) {
+ cerr << "imread()" << endl;
+ return 1;
+ }
+ Mat dst(src.rows, src.cols, src.type());
+
+ for (int j = 0; j < src.rows; j++) {
+ for (int i = 0; i < src.cols; i++) {
+ dst.at(j, i) = saturate_cast(src.at(j, i) + 100);
+ }
+ }
+
+ imshow("src", src);
+ imshow("dst", dst);
+ waitKey();
+ destroyAllWindows();
+ return 0;
+}
+
+void on_brightness(int pos, void* userdata) {
+ Mat src = *(Mat*)userdata;
+ Mat dst = src + pos;
+
+ imshow("dst", dst);
+}
+
+int brightness4() {
+ Mat src = imread("..\\..\\resources\\images\\lenna.bmp", IMREAD_GRAYSCALE);
+ if (src.empty()) {
+ cerr << "imread()" << endl;
+ return 1;
+ }
+ namedWindow("dst");
+ createTrackbar("Brightness", "dst", 0, 100, on_brightness, (void*)&src);
+
+ waitKey();
+ destroyAllWindows();
+ return 0;
+}
+
+int mosaic() {
+ Mat src = imread("..\\..\\resources\\images\\lenna.bmp", IMREAD_COLOR_RGB);
+ if (src.empty()) {
+ cerr << "imread()" << endl;
+ return 1;
+ }
+
+ const
+
+ Mat dst(src.rows, src.cols, src.type());
+
+ for (int j = 0; j < src.rows; j++) {
+ for (int i = 0; i < src.cols; i++) {
+ dst.at(j, i) = src.at(j, i) + 100;
+ }
+ }
+}
\ No newline at end of file
diff --git a/ch05/contrast/contrast.vcxproj b/ch05/contrast/contrast.vcxproj
new file mode 100644
index 0000000..35574d1
--- /dev/null
+++ b/ch05/contrast/contrast.vcxproj
@@ -0,0 +1,139 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {926b8522-38e8-41e3-a358-d9d628dff8a4}
+ contrast
+ 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/ch05/contrast/contrast.vcxproj.filters b/ch05/contrast/contrast.vcxproj.filters
new file mode 100644
index 0000000..2c1b3dc
--- /dev/null
+++ b/ch05/contrast/contrast.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/ch05/contrast/main.cpp b/ch05/contrast/main.cpp
new file mode 100644
index 0000000..88f685a
--- /dev/null
+++ b/ch05/contrast/main.cpp
@@ -0,0 +1,68 @@
+#include
+#include "opencv2/opencv.hpp"
+
+using namespace std;
+using namespace cv;
+
+int contrast0();
+int contrast1();
+int contrast2();
+
+Mat sigmoid(const Mat& input) {
+ Mat output;
+ exp(-1 * input, output); // e^(-x)
+ output = 1.0 / (1.0 + output); // sigmoid(x) = 1 / (1 + e^(-x))
+ return output;
+}
+
+int main() {
+ return contrast0();
+}
+
+int contrast0() {
+ Mat src = imread("..\\..\\resources\\images\\lenna.bmp", IMREAD_GRAYSCALE);
+ if (src.empty()) {
+ cerr << "imread()" << endl;
+ return 1;
+ }
+ float alpha = 1.f;
+ Mat dst = (sigmoid(src * alpha) * 128);
+
+ imshow("src", src);
+ imshow("dst", dst);
+
+ waitKey();
+ destroyAllWindows();
+}
+
+int contrast1() {
+ Mat src = imread("..\\..\\resources\\images\\lenna.bmp", IMREAD_GRAYSCALE);
+ if (src.empty()) {
+ cerr << "imread()" << endl;
+ return 1;
+ }
+ float s = 2.f;
+ Mat dst = s * src;
+
+ imshow("src", src);
+ imshow("dst", dst);
+
+ waitKey();
+ destroyAllWindows();
+}
+
+int contrast2() {
+ Mat src = imread("..\\..\\resources\\images\\lenna.bmp", IMREAD_GRAYSCALE);
+ if (src.empty()) {
+ cerr << "imread()" << endl;
+ return 1;
+ }
+ float alpha = 1.f;
+ Mat dst = src + (src - 128) * alpha;
+
+ imshow("src", src);
+ imshow("dst", dst);
+
+ waitKey();
+ destroyAllWindows();
+}
\ No newline at end of file
diff --git a/ch05/histogram/histogram.vcxproj b/ch05/histogram/histogram.vcxproj
new file mode 100644
index 0000000..c85e12d
--- /dev/null
+++ b/ch05/histogram/histogram.vcxproj
@@ -0,0 +1,145 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {d0c81788-4531-4e50-a2de-7add77039fce}
+ histogram
+ 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/ch05/histogram/histogram.vcxproj.filters b/ch05/histogram/histogram.vcxproj.filters
new file mode 100644
index 0000000..bef2799
--- /dev/null
+++ b/ch05/histogram/histogram.vcxproj.filters
@@ -0,0 +1,32 @@
+
+
+
+
+ {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/ch05/histogram/main.cpp b/ch05/histogram/main.cpp
new file mode 100644
index 0000000..aeba77d
--- /dev/null
+++ b/ch05/histogram/main.cpp
@@ -0,0 +1,81 @@
+#include
+#include "opencv2/opencv.hpp"
+
+using namespace std;
+using namespace cv;
+
+Mat calcGrayHist(const Mat& img);
+Mat getGrayHistImage(const Mat& hist);
+Mat histogram_stretching(const Mat& src);
+
+int main() {
+ VideoCapture video;
+ video.open("..\\..\\resources\\images\\vtest.avi");
+ int fps = video.get(CAP_PROP_FPS);
+
+ Mat src;
+
+ while (true) {
+ video >> src;
+ if (src.empty())
+ return 1;
+ imshow("sample", src);
+ if (waitKey(1000 / fps) == 27)
+ break;
+ }
+ cvtColor(src, src, COLOR_BGR2GRAY);
+ src = src + 20;
+ Mat src_hist_img = getGrayHistImage(calcGrayHist(src));
+ Mat dst = histogram_stretching(src);
+ Mat dst_hist_img = getGrayHistImage(calcGrayHist(dst));
+
+ imshow("src", src);
+ imshow("srcHist", src_hist_img);
+
+ imshow("dst", dst);
+ imshow("dstHist", dst_hist_img);
+
+ waitKey();
+ destroyAllWindows();
+
+ return 0;
+}
+
+Mat calcGrayHist(const Mat& img) {
+ CV_Assert(img.type() == CV_8UC1);
+
+ Mat hist;
+ int channels[] = { 0, };
+ int dims = 1;
+ const int histSize[] = { 256, };
+ float graylevel[] = { 0, 256 };
+ const float* ranges[] = { graylevel };
+
+ calcHist(&img, 1, channels, noArray(), hist, dims, histSize, ranges);
+
+ return hist;
+}
+
+Mat getGrayHistImage(const Mat& hist) {
+ CV_Assert(hist.type() == CV_32FC1);
+ CV_Assert(hist.size() == Size(1, 256));
+
+ double histMax;
+ minMaxLoc(hist, 0, &histMax);
+
+ Mat imgHist(100, 256, CV_8UC1, Scalar(255));
+ for (int i = 0; i < 256; i++) {
+ line(imgHist, Point(i, 100), Point(i, 100 - cvRound(hist.at(i, 0) * 100 / histMax)), Scalar(0));
+ }
+
+ return imgHist;
+}
+
+Mat histogram_stretching(const Mat &src) {
+ double gmin, gmax;
+ minMaxLoc(src, &gmin, &gmax);
+
+ Mat dst = (src - gmin) * 255 / (gmax - gmin);
+
+ return dst;
+}
\ No newline at end of file
diff --git a/ch06/Arithmetic/Arithmetic.vcxproj b/ch06/Arithmetic/Arithmetic.vcxproj
new file mode 100644
index 0000000..00ea8b5
--- /dev/null
+++ b/ch06/Arithmetic/Arithmetic.vcxproj
@@ -0,0 +1,148 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {69a9cd92-339e-4cec-8427-3a71197437d4}
+ Arithmetic
+ 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/ch06/Arithmetic/Arithmetic.vcxproj.filters b/ch06/Arithmetic/Arithmetic.vcxproj.filters
new file mode 100644
index 0000000..0503fa0
--- /dev/null
+++ b/ch06/Arithmetic/Arithmetic.vcxproj.filters
@@ -0,0 +1,41 @@
+
+
+
+
+ {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/ch06/Arithmetic/main.cpp b/ch06/Arithmetic/main.cpp
new file mode 100644
index 0000000..60b8cd9
--- /dev/null
+++ b/ch06/Arithmetic/main.cpp
@@ -0,0 +1,82 @@
+#include
+#include "opencv2/opencv.hpp"
+
+using namespace std;
+using namespace cv;
+
+void arithmetic() {
+ Mat src1 = imread("..\\..\\resources\\images\\lenna256.bmp", IMREAD_GRAYSCALE);
+ resize(src1, src1, Size(256, 256));
+ Mat src2 = imread("..\\..\\resources\\images\\square.bmp", IMREAD_GRAYSCALE);
+ resize(src2, src2, Size(256, 256));
+
+ imshow("src1", src1);
+ imshow("src2", src2);
+
+ Mat dst1, dst2, dst3, dst4;
+ add(src1, src2, dst1);
+ addWeighted(src1, 0.5, src2, 0.5, 0, dst2);
+ subtract(src1, src2, dst3);
+ absdiff(src1, src2, dst4);
+
+ imshow("dst1", dst1);
+ imshow("dst2", dst2);
+ imshow("dst3", dst3);
+ imshow("dst4", dst4);
+ waitKey();
+}
+
+void add() {
+ Mat img1 = imread("..\\..\\resources\\images\\lenna.bmp", IMREAD_GRAYSCALE);
+ resize(img1, img1, Size(256, 256));
+ Mat img2 = imread("..\\..\\resources\\images\\Cameraman256.bmp", IMREAD_GRAYSCALE);
+
+ Mat addimg;
+
+ add(img1, img2, addimg, noArray(), -1);
+
+ imshow("img1", img1);
+ imshow("img2", img2);
+ imshow("addimg", addimg);
+
+ waitKey();
+ destroyAllWindows();
+}
+
+bool equls(Mat &left, Mat &right) {
+ for (int i=0; i < left.cols; i++)
+ for (int j=0; j < left.rows; j++)
+ if (left.at(j, i) - right.at(j, i))
+ return false;
+ return true;
+}
+
+void _absdiff() {
+ VideoCapture video;
+ video.open("..\\..\\resources\\images\\vtest.avi");
+ if (!video.isOpened())
+ return;
+ Mat frame, previous_frame;
+
+ video >> frame;
+ previous_frame = frame;
+
+ double fps = video.get(CAP_PROP_FPS);
+
+ while (!frame.empty()) {
+ video >> frame;
+ imshow("frame", frame);
+ Mat diff;
+ if (equls(previous_frame, frame)) {
+ absdiff(frame, previous_frame, diff);
+ imshow("diff", diff);
+ }
+ previous_frame = frame;
+ waitKey(cvRound(1000/fps));
+ }
+}
+
+int main() {
+ _absdiff();
+ return EXIT_SUCCESS;
+}
\ No newline at end of file
diff --git a/ch06/logical/logical.vcxproj b/ch06/logical/logical.vcxproj
new file mode 100644
index 0000000..772f5be
--- /dev/null
+++ b/ch06/logical/logical.vcxproj
@@ -0,0 +1,143 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {8e7c00ae-b124-4c7e-848f-f85838afc69a}
+ logical
+ 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/ch06/logical/logical.vcxproj.filters b/ch06/logical/logical.vcxproj.filters
new file mode 100644
index 0000000..69d9c27
--- /dev/null
+++ b/ch06/logical/logical.vcxproj.filters
@@ -0,0 +1,30 @@
+
+
+
+
+ {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/ch06/logical/main.cpp b/ch06/logical/main.cpp
new file mode 100644
index 0000000..c48590a
--- /dev/null
+++ b/ch06/logical/main.cpp
@@ -0,0 +1,29 @@
+#include
+#include "opencv2/opencv.hpp"
+
+using namespace std;
+using namespace cv;
+
+int main() {
+ Mat img1 = imread("..\\..\\resources\\images\\lenna256.bmp", IMREAD_GRAYSCALE);
+ resize(img1, img1, Size(256, 256));
+ Mat img2 = imread("..\\..\\resources\\images\\square.bmp", IMREAD_GRAYSCALE);
+
+ imshow("img1", img1);
+ imshow("img2", img2);
+
+ Mat dst1, dst2, dst3, dst4;
+
+ bitwise_and(img1, img2, dst1);
+ bitwise_or(img1, img2, dst2);
+ bitwise_xor(img1, img2, dst3);
+ bitwise_not(img1, dst4);
+
+ imshow("dst1", dst1);
+ imshow("dst2", dst2);
+ imshow("dst3", dst3);
+ imshow("dst4", dst4);
+ waitKey();
+
+ return EXIT_SUCCESS;
+}
\ No newline at end of file
diff --git a/ch07/blurring/blurring.vcxproj b/ch07/blurring/blurring.vcxproj
new file mode 100644
index 0000000..9b11a88
--- /dev/null
+++ b/ch07/blurring/blurring.vcxproj
@@ -0,0 +1,139 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {61942c1c-14ca-49a7-b89a-4c6a8996ca6d}
+ blurring
+ 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/ch07/blurring/blurring.vcxproj.filters b/ch07/blurring/blurring.vcxproj.filters
new file mode 100644
index 0000000..2c1b3dc
--- /dev/null
+++ b/ch07/blurring/blurring.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/ch07/blurring/main.cpp b/ch07/blurring/main.cpp
new file mode 100644
index 0000000..4e029e2
--- /dev/null
+++ b/ch07/blurring/main.cpp
@@ -0,0 +1,24 @@
+#include
+#include "opencv2/opencv.hpp"
+
+using namespace std;
+using namespace cv;
+
+int main() {
+ Mat src = imread("..\\..\\resources\\images\\rose.bmp", IMREAD_GRAYSCALE);
+
+ imshow("src", src);
+
+ Mat dst;
+ for (int sigma = 1; sigma <= 5; sigma++) {
+ GaussianBlur(src, dst, Size(), (double)sigma);
+
+ string text = format("sigma = %d", sigma);
+ putText(dst, text, Point(10, 30), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(255), 1, LINE_AA);
+
+ imshow(text, dst);
+ waitKey(0);
+ }
+
+ destroyAllWindows();
+}
\ No newline at end of file
diff --git a/ch07/noise/main.cpp b/ch07/noise/main.cpp
new file mode 100644
index 0000000..f7534f8
--- /dev/null
+++ b/ch07/noise/main.cpp
@@ -0,0 +1,52 @@
+#include
+#include "opencv2/opencv.hpp"
+
+using namespace std;
+using namespace cv;
+
+void noise_gaussian() {
+ Mat src = imread("..\\..\\resources\\images\\lenna.bmp", IMREAD_GRAYSCALE);
+
+ imshow("src", src);
+
+ for (int stddev = 10; stddev <= 100; stddev+=10) {
+ Mat noise(src.size(), CV_32SC1);
+ randn(noise, 0, stddev);
+
+ Mat dst;
+ add(src, noise, dst, Mat(), CV_8U);
+
+ string text = format("stddev = %d", stddev);
+ putText(dst, text, Point(10, 30), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(255), 1, LINE_AA);
+
+ imshow(text, dst);
+ waitKey(0);
+ }
+ destroyAllWindows();
+}
+
+void filter_bilateral() {
+ Mat src = imread("..\\..\\resources\\images\\lenna.bmp", IMREAD_GRAYSCALE);
+
+ Mat noise(src.size(), CV_32SC1);
+ randn(noise, 0, 5);
+ add(src, noise, src, Mat(), CV_8U);
+
+ Mat dst1;
+ GaussianBlur(src, dst1, Size(), 5);
+
+ Mat dst2;
+ bilateralFilter(src, dst2, -1, 10, 5);
+
+ imshow("src", src);
+ imshow("dst1", dst1);
+ imshow("dst2", dst2);
+
+ waitKey(0);
+ destroyAllWindows();
+}
+
+int main() {
+ filter_bilateral();
+ return EXIT_SUCCESS;
+}
\ No newline at end of file
diff --git a/ch07/noise/noise.vcxproj b/ch07/noise/noise.vcxproj
new file mode 100644
index 0000000..ecbcb4e
--- /dev/null
+++ b/ch07/noise/noise.vcxproj
@@ -0,0 +1,139 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {380222ef-ffe1-445f-b409-1dd866df1ed9}
+ noise
+ 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/ch07/noise/noise.vcxproj.filters b/ch07/noise/noise.vcxproj.filters
new file mode 100644
index 0000000..2c1b3dc
--- /dev/null
+++ b/ch07/noise/noise.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/ch07/sharpen/main.cpp b/ch07/sharpen/main.cpp
new file mode 100644
index 0000000..abcc5a0
--- /dev/null
+++ b/ch07/sharpen/main.cpp
@@ -0,0 +1,31 @@
+#include
+#include "opencv2/opencv.hpp"
+
+using namespace std;
+using namespace cv;
+
+void unsharp_mask() {
+ Mat src = imread("..\\..\\resources\\images\\rose.bmp", IMREAD_GRAYSCALE);
+
+ imshow("src", src);
+
+ for (int sigma = 1; sigma <= 5; sigma++) {
+ Mat blurred;
+ GaussianBlur(src, blurred, Size(), (double)sigma);
+
+ constexpr float alpha = 1.f;
+ Mat dst = (1 + alpha) * src - alpha * blurred;
+
+ string text = format("sigma = %d", sigma);
+ putText(dst, text, Point(10, 30), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(255), 1, LINE_AA);
+
+ imshow(text, dst);
+ waitKey(0);
+ }
+ destroyAllWindows();
+}
+
+int main() {
+ unsharp_mask();
+ return EXIT_SUCCESS;
+}
\ No newline at end of file
diff --git a/ch07/sharpen/sharpen.vcxproj b/ch07/sharpen/sharpen.vcxproj
new file mode 100644
index 0000000..0022dfc
--- /dev/null
+++ b/ch07/sharpen/sharpen.vcxproj
@@ -0,0 +1,139 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {a871f9d8-2dd0-4b01-a304-e738968313f2}
+ sharpen
+ 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/ch07/sharpen/sharpen.vcxproj.filters b/ch07/sharpen/sharpen.vcxproj.filters
new file mode 100644
index 0000000..2c1b3dc
--- /dev/null
+++ b/ch07/sharpen/sharpen.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/cn06/filter/filter.vcxproj b/cn06/filter/filter.vcxproj
new file mode 100644
index 0000000..aa01c93
--- /dev/null
+++ b/cn06/filter/filter.vcxproj
@@ -0,0 +1,142 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {8219467f-93df-4080-8452-97e1ec422d8b}
+ filter
+ 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/cn06/filter/filter.vcxproj.filters b/cn06/filter/filter.vcxproj.filters
new file mode 100644
index 0000000..dfacd42
--- /dev/null
+++ b/cn06/filter/filter.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/cn06/filter/main.cpp b/cn06/filter/main.cpp
new file mode 100644
index 0000000..fe0b9fb
--- /dev/null
+++ b/cn06/filter/main.cpp
@@ -0,0 +1,76 @@
+#include
+#include "opencv2/opencv.hpp"
+
+using namespace std;
+using namespace cv;
+
+void filter_embossing() {
+ Mat src = imread("..\\..\\resources\\images\\rose.bmp", IMREAD_GRAYSCALE);
+
+ float filter1[] =
+ { -1, -1, 0, -1, 0, 1, 0, 1, 1 };
+ float filter2[] =
+ { -1, -1, -1, -1, 0,
+ -1, -1, -1, 0, 1,
+ -1, -1, 0, 1, 1,
+ -1, 0, 1, 1, 1,
+ 0, 1, 1, 1, 1, };
+ float filter3[] =
+ {
+ -1, -1, -1, -1, -1, -1, 0, 1, 1, 1, 1, 1, 1,
+ -1, -1, -1, -1, -1, -1, 0, 1, 1, 1, 1, 1, 1,
+ -1, -1, -1, -1, -1, -1, 0, 1, 1, 1, 1, 1, 1,
+ -1, -1, -1, -1, -1, -1, 0, 1, 1, 1, 1, 1, 1,
+ -1, -1, -1, -1, -1, -1, 0, 1, 1, 1, 1, 1, 1,
+ -1, -1, -1, -1, -1, -1, 0, 1, 1, 1, 1, 1, 1,
+ -1, -1, -1, -1, -1, -1, 0, 1, 1, 1, 1, 1, 1,
+ -1, -1, -1, -1, -1, -1, 0, 1, 1, 1, 1, 1, 1,
+ -1, -1, -1, -1, -1, -1, 0, 1, 1, 1, 1, 1, 1,
+ -1, -1, -1, -1, -1, -1, 0, 1, 1, 1, 1, 1, 1,
+ -1, -1, -1, -1, -1, -1, 0, 1, 1, 1, 1, 1, 1,
+ -1, -1, -1, -1, -1, -1, 0, 1, 1, 1, 1, 1, 1,
+ -1, -1, -1, -1, -1, -1, 0, 1, 1, 1, 1, 1, 1
+ };
+ float filter4[] =
+ {
+ -1, -1, -1, 0, 1, 1, 1,
+ -1, -1, -1, 0, 1, 1, 1,
+ -1, -1, -1, 0, 1, 1, 1,
+ -1, -1, -1, 0, 1, 1, 1,
+ -1, -1, -1, 0, 1, 1, 1,
+ -1, -1, -1, 0, 1, 1, 1,
+ -1, -1, -1, 0, 1, 1, 1
+ };
+ Mat emboss(7, 7, CV_32FC1, filter4);
+ Mat dst;
+
+ filter2D(src, dst, -1, emboss, Point(-1, -1), 128);
+
+ imshow("src", src);
+ imshow("dst", dst);
+
+ waitKey(0);
+ destroyAllWindows();
+}
+
+void blurring_mean() {
+ Mat src = imread("..\\..\\resources\\images\\rose.bmp", IMREAD_GRAYSCALE);
+
+ imshow("src", src);
+
+ Mat dst;
+ for (int ksize = 3; ksize <= 7; ksize += 2) {
+ blur(src, dst, Size(ksize, ksize));
+
+ String desc = format("Mean: %dx%d", ksize, ksize);
+ putText(dst, desc, Point(10, 30), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(255), 1, LINE_AA);
+
+ imshow(desc, dst);
+ waitKey(0);
+ }
+ destroyAllWindows();
+}
+
+int main() {
+ filter_embossing();
+}
\ No newline at end of file