├── ImageSystem.sln
├── ImageSystem
├── CImageProcessing.cpp
├── CImageProcessing.h
├── ErosionDlg.cpp
├── ErosionDlg.h
├── GammaTransformDlg.cpp
├── GammaTransformDlg.h
├── ImageSystem.aps
├── ImageSystem.cpp
├── ImageSystem.h
├── ImageSystem.rc
├── ImageSystem.vcxproj
├── ImageSystem.vcxproj.filters
├── ImageSystem.vcxproj.user
├── ImageSystemDlg.cpp
├── ImageSystemDlg.h
├── LinearTransformDlg.cpp
├── LinearTransformDlg.h
├── LogTransformDlg.cpp
├── LogTransformDlg.h
├── framework.h
├── pch.cpp
├── pch.h
├── res
│ ├── ImageSystem.ico
│ ├── ImageSystem.rc2
│ ├── lenna.jpg
│ ├── 两张人脸.png
│ └── 噪声图片.png
├── resource.h
├── result.png
└── targetver.h
├── README.md
└── xml
└── haarcascade_frontalface_alt.xml
/ImageSystem.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 16
4 | VisualStudioVersion = 16.0.33423.256
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ImageSystem", "ImageSystem\ImageSystem.vcxproj", "{F46B4439-9CC2-4FF8-84FB-FFF073690BE8}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|x64 = Debug|x64
11 | Debug|x86 = Debug|x86
12 | Release|x64 = Release|x64
13 | Release|x86 = Release|x86
14 | EndGlobalSection
15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
16 | {F46B4439-9CC2-4FF8-84FB-FFF073690BE8}.Debug|x64.ActiveCfg = Debug|x64
17 | {F46B4439-9CC2-4FF8-84FB-FFF073690BE8}.Debug|x64.Build.0 = Debug|x64
18 | {F46B4439-9CC2-4FF8-84FB-FFF073690BE8}.Debug|x86.ActiveCfg = Debug|Win32
19 | {F46B4439-9CC2-4FF8-84FB-FFF073690BE8}.Debug|x86.Build.0 = Debug|Win32
20 | {F46B4439-9CC2-4FF8-84FB-FFF073690BE8}.Release|x64.ActiveCfg = Release|x64
21 | {F46B4439-9CC2-4FF8-84FB-FFF073690BE8}.Release|x64.Build.0 = Release|x64
22 | {F46B4439-9CC2-4FF8-84FB-FFF073690BE8}.Release|x86.ActiveCfg = Release|Win32
23 | {F46B4439-9CC2-4FF8-84FB-FFF073690BE8}.Release|x86.Build.0 = Release|Win32
24 | EndGlobalSection
25 | GlobalSection(SolutionProperties) = preSolution
26 | HideSolutionNode = FALSE
27 | EndGlobalSection
28 | GlobalSection(ExtensibilityGlobals) = postSolution
29 | SolutionGuid = {281E98FA-F12A-43AA-9324-3266C83E0814}
30 | EndGlobalSection
31 | EndGlobal
32 |
--------------------------------------------------------------------------------
/ImageSystem/CImageProcessing.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mouseminar/MFC-ImageSystem/248e7489753cebf017d3b41c5b6ee18c595ba3c7/ImageSystem/CImageProcessing.cpp
--------------------------------------------------------------------------------
/ImageSystem/CImageProcessing.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mouseminar/MFC-ImageSystem/248e7489753cebf017d3b41c5b6ee18c595ba3c7/ImageSystem/CImageProcessing.h
--------------------------------------------------------------------------------
/ImageSystem/ErosionDlg.cpp:
--------------------------------------------------------------------------------
1 | // ErosionDlg.cpp: 实现文件
2 | //
3 |
4 | #include "pch.h"
5 | #include "ImageSystem.h"
6 | #include "ErosionDlg.h"
7 | #include "afxdialogex.h"
8 |
9 |
10 | // ErosionDlg 对话框
11 |
12 | IMPLEMENT_DYNAMIC(ErosionDlg, CDialogEx)
13 |
14 | ErosionDlg::ErosionDlg(CWnd* pParent /*=nullptr*/)
15 | : CDialogEx(IDD_ErosionDlg, pParent)
16 | , m_value(0)
17 | {
18 |
19 | }
20 |
21 | ErosionDlg::~ErosionDlg()
22 | {
23 | }
24 |
25 | void ErosionDlg::DoDataExchange(CDataExchange* pDX)
26 | {
27 | CDialogEx::DoDataExchange(pDX);
28 | DDX_Text(pDX, IDC_EDIT1, m_value);
29 | }
30 |
31 |
32 | BEGIN_MESSAGE_MAP(ErosionDlg, CDialogEx)
33 | ON_BN_CLICKED(IDOK, &ErosionDlg::OnBnClickedOk)
34 | END_MESSAGE_MAP()
35 |
36 |
37 | // ErosionDlg 消息处理程序
38 |
39 |
40 | void ErosionDlg::OnBnClickedOk()
41 | {
42 | // TODO: 在此添加控件通知处理程序代码
43 | UpdateData(TRUE);
44 | CDialogEx::OnOK();
45 | }
46 |
--------------------------------------------------------------------------------
/ImageSystem/ErosionDlg.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 |
4 | // ErosionDlg 对话框
5 |
6 | class ErosionDlg : public CDialogEx
7 | {
8 | DECLARE_DYNAMIC(ErosionDlg)
9 |
10 | public:
11 | ErosionDlg(CWnd* pParent = nullptr); // 标准构造函数
12 | virtual ~ErosionDlg();
13 |
14 | // 对话框数据
15 | #ifdef AFX_DESIGN_TIME
16 | enum { IDD = IDD_ErosionDlg };
17 | #endif
18 |
19 | protected:
20 | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
21 |
22 | DECLARE_MESSAGE_MAP()
23 | public:
24 | int m_value;
25 | afx_msg void OnBnClickedOk();
26 | };
27 |
--------------------------------------------------------------------------------
/ImageSystem/GammaTransformDlg.cpp:
--------------------------------------------------------------------------------
1 | // GammaTransformDlg.cpp: 实现文件
2 | //
3 |
4 | #include "pch.h"
5 | #include "ImageSystem.h"
6 | #include "GammaTransformDlg.h"
7 | #include "afxdialogex.h"
8 |
9 |
10 | // GammaTransformDlg 对话框
11 |
12 | IMPLEMENT_DYNAMIC(GammaTransformDlg, CDialogEx)
13 |
14 | GammaTransformDlg::GammaTransformDlg(CWnd* pParent /*=nullptr*/)
15 | : CDialogEx(IDD_GammaTransformDlg, pParent)
16 | , m_gamma(0)
17 | {
18 |
19 | }
20 |
21 | GammaTransformDlg::~GammaTransformDlg()
22 | {
23 | }
24 |
25 | void GammaTransformDlg::DoDataExchange(CDataExchange* pDX)
26 | {
27 | CDialogEx::DoDataExchange(pDX);
28 | DDX_Text(pDX, IDC_EDIT1, m_gamma);
29 | }
30 |
31 |
32 | BEGIN_MESSAGE_MAP(GammaTransformDlg, CDialogEx)
33 | ON_BN_CLICKED(IDOK, &GammaTransformDlg::OnBnClickedOk)
34 | END_MESSAGE_MAP()
35 |
36 |
37 | // GammaTransformDlg 消息处理程序
38 |
39 |
40 | void GammaTransformDlg::OnBnClickedOk()
41 | {
42 | // TODO: 在此添加控件通知处理程序代码
43 | UpdateData(TRUE);
44 | CDialogEx::OnOK();
45 | }
46 |
--------------------------------------------------------------------------------
/ImageSystem/GammaTransformDlg.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 |
4 | // GammaTransformDlg 对话框
5 |
6 | class GammaTransformDlg : public CDialogEx
7 | {
8 | DECLARE_DYNAMIC(GammaTransformDlg)
9 |
10 | public:
11 | GammaTransformDlg(CWnd* pParent = nullptr); // 标准构造函数
12 | virtual ~GammaTransformDlg();
13 |
14 | // 对话框数据
15 | #ifdef AFX_DESIGN_TIME
16 | enum { IDD = IDD_GammaTransformDlg };
17 | #endif
18 |
19 | protected:
20 | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
21 |
22 | DECLARE_MESSAGE_MAP()
23 | public:
24 | double m_gamma;
25 | afx_msg void OnBnClickedOk();
26 | };
27 |
--------------------------------------------------------------------------------
/ImageSystem/ImageSystem.aps:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mouseminar/MFC-ImageSystem/248e7489753cebf017d3b41c5b6ee18c595ba3c7/ImageSystem/ImageSystem.aps
--------------------------------------------------------------------------------
/ImageSystem/ImageSystem.cpp:
--------------------------------------------------------------------------------
1 |
2 | // ImageSystem.cpp: 定义应用程序的类行为。
3 | //
4 |
5 | #include "pch.h"
6 | #include "framework.h"
7 | #include "ImageSystem.h"
8 | #include "ImageSystemDlg.h"
9 |
10 | #ifdef _DEBUG
11 | #define new DEBUG_NEW
12 | #endif
13 |
14 |
15 | // CImageSystemApp
16 |
17 | BEGIN_MESSAGE_MAP(CImageSystemApp, CWinApp)
18 | ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
19 | END_MESSAGE_MAP()
20 |
21 |
22 | // CImageSystemApp 构造
23 |
24 | CImageSystemApp::CImageSystemApp()
25 | {
26 | // 支持重新启动管理器
27 | m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
28 |
29 | // TODO: 在此处添加构造代码,
30 | // 将所有重要的初始化放置在 InitInstance 中
31 | }
32 |
33 |
34 | // 唯一的 CImageSystemApp 对象
35 |
36 | CImageSystemApp theApp;
37 |
38 |
39 | // CImageSystemApp 初始化
40 |
41 | BOOL CImageSystemApp::InitInstance()
42 | {
43 | // 如果一个运行在 Windows XP 上的应用程序清单指定要
44 | // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
45 | //则需要 InitCommonControlsEx()。 否则,将无法创建窗口。
46 | INITCOMMONCONTROLSEX InitCtrls;
47 | InitCtrls.dwSize = sizeof(InitCtrls);
48 | // 将它设置为包括所有要在应用程序中使用的
49 | // 公共控件类。
50 | InitCtrls.dwICC = ICC_WIN95_CLASSES;
51 | InitCommonControlsEx(&InitCtrls);
52 |
53 | CWinApp::InitInstance();
54 |
55 |
56 | AfxEnableControlContainer();
57 |
58 | // 创建 shell 管理器,以防对话框包含
59 | // 任何 shell 树视图控件或 shell 列表视图控件。
60 | CShellManager *pShellManager = new CShellManager;
61 |
62 | // 激活“Windows Native”视觉管理器,以便在 MFC 控件中启用主题
63 | CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
64 |
65 | // 标准初始化
66 | // 如果未使用这些功能并希望减小
67 | // 最终可执行文件的大小,则应移除下列
68 | // 不需要的特定初始化例程
69 | // 更改用于存储设置的注册表项
70 | // TODO: 应适当修改该字符串,
71 | // 例如修改为公司或组织名
72 | SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
73 |
74 | CImageSystemDlg dlg;
75 | m_pMainWnd = &dlg;
76 | INT_PTR nResponse = dlg.DoModal();
77 | if (nResponse == IDOK)
78 | {
79 | // TODO: 在此放置处理何时用
80 | // “确定”来关闭对话框的代码
81 | }
82 | else if (nResponse == IDCANCEL)
83 | {
84 | // TODO: 在此放置处理何时用
85 | // “取消”来关闭对话框的代码
86 | }
87 | else if (nResponse == -1)
88 | {
89 | TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n");
90 | TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n");
91 | }
92 |
93 | // 删除上面创建的 shell 管理器。
94 | if (pShellManager != nullptr)
95 | {
96 | delete pShellManager;
97 | }
98 |
99 | #if !defined(_AFXDLL) && !defined(_AFX_NO_MFC_CONTROLS_IN_DIALOGS)
100 | ControlBarCleanUp();
101 | #endif
102 |
103 | // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
104 | // 而不是启动应用程序的消息泵。
105 | return FALSE;
106 | }
107 |
108 |
--------------------------------------------------------------------------------
/ImageSystem/ImageSystem.h:
--------------------------------------------------------------------------------
1 |
2 | // ImageSystem.h: PROJECT_NAME 应用程序的主头文件
3 | //
4 |
5 | #pragma once
6 |
7 | #ifndef __AFXWIN_H__
8 | #error "在包含此文件之前包含 'pch.h' 以生成 PCH"
9 | #endif
10 |
11 | #include "resource.h" // 主符号
12 |
13 |
14 | // CImageSystemApp:
15 | // 有关此类的实现,请参阅 ImageSystem.cpp
16 | //
17 |
18 | class CImageSystemApp : public CWinApp
19 | {
20 | public:
21 | CImageSystemApp();
22 |
23 | // 重写
24 | public:
25 | virtual BOOL InitInstance();
26 |
27 | // 实现
28 |
29 | DECLARE_MESSAGE_MAP()
30 | };
31 |
32 | extern CImageSystemApp theApp;
33 |
--------------------------------------------------------------------------------
/ImageSystem/ImageSystem.rc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mouseminar/MFC-ImageSystem/248e7489753cebf017d3b41c5b6ee18c595ba3c7/ImageSystem/ImageSystem.rc
--------------------------------------------------------------------------------
/ImageSystem/ImageSystem.vcxproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | Win32
7 |
8 |
9 | Release
10 | Win32
11 |
12 |
13 | Debug
14 | x64
15 |
16 |
17 | Release
18 | x64
19 |
20 |
21 |
22 | 16.0
23 | {F46B4439-9CC2-4FF8-84FB-FFF073690BE8}
24 | MFCProj
25 | ImageSystem
26 | 10.0
27 |
28 |
29 |
30 | Application
31 | true
32 | v142
33 | Unicode
34 | Dynamic
35 |
36 |
37 | Application
38 | false
39 | v142
40 | true
41 | Unicode
42 | Dynamic
43 |
44 |
45 | Application
46 | true
47 | v142
48 | MultiByte
49 | Dynamic
50 |
51 |
52 | Application
53 | false
54 | v142
55 | true
56 | Unicode
57 | Dynamic
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 | true
79 |
80 |
81 | true
82 | C:\Program Files\opencv\build\include;$(IncludePath)
83 | C:\Program Files\opencv\build\x64\vc15\lib;$(LibraryPath)
84 |
85 |
86 | false
87 |
88 |
89 | false
90 |
91 |
92 |
93 | Use
94 | Level3
95 | true
96 | WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions)
97 | pch.h
98 |
99 |
100 | Windows
101 |
102 |
103 | false
104 | true
105 | _DEBUG;%(PreprocessorDefinitions)
106 |
107 |
108 | 0x0804
109 | _DEBUG;%(PreprocessorDefinitions)
110 | $(IntDir);%(AdditionalIncludeDirectories)
111 |
112 |
113 |
114 |
115 | Use
116 | Level3
117 | true
118 | _WINDOWS;_DEBUG;%(PreprocessorDefinitions)
119 | pch.h
120 |
121 |
122 | Windows
123 | opencv_world410d.lib
124 |
125 |
126 | false
127 | true
128 | _DEBUG;%(PreprocessorDefinitions)
129 |
130 |
131 | 0x0804
132 | _DEBUG;%(PreprocessorDefinitions)
133 | $(IntDir);%(AdditionalIncludeDirectories)
134 |
135 |
136 |
137 |
138 | Use
139 | Level3
140 | true
141 | true
142 | true
143 | WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)
144 | pch.h
145 |
146 |
147 | Windows
148 | true
149 | true
150 |
151 |
152 | false
153 | true
154 | NDEBUG;%(PreprocessorDefinitions)
155 |
156 |
157 | 0x0804
158 | NDEBUG;%(PreprocessorDefinitions)
159 | $(IntDir);%(AdditionalIncludeDirectories)
160 |
161 |
162 |
163 |
164 | Use
165 | Level3
166 | true
167 | true
168 | true
169 | _WINDOWS;NDEBUG;%(PreprocessorDefinitions)
170 | pch.h
171 |
172 |
173 | Windows
174 | true
175 | true
176 |
177 |
178 | false
179 | true
180 | NDEBUG;%(PreprocessorDefinitions)
181 |
182 |
183 | 0x0804
184 | NDEBUG;%(PreprocessorDefinitions)
185 | $(IntDir);%(AdditionalIncludeDirectories)
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 | Create
211 | Create
212 | Create
213 | Create
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
--------------------------------------------------------------------------------
/ImageSystem/ImageSystem.vcxproj.filters:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
6 | cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
7 |
8 |
9 | {93995380-89BD-4b04-88EB-625FBE52EBFB}
10 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
11 |
12 |
13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
15 |
16 |
17 |
18 |
19 | 头文件
20 |
21 |
22 | 头文件
23 |
24 |
25 | 头文件
26 |
27 |
28 | 头文件
29 |
30 |
31 | 头文件
32 |
33 |
34 | 头文件
35 |
36 |
37 | 头文件
38 |
39 |
40 | 头文件
41 |
42 |
43 | 头文件
44 |
45 |
46 | 头文件
47 |
48 |
49 | 头文件
50 |
51 |
52 |
53 |
54 | 源文件
55 |
56 |
57 | 源文件
58 |
59 |
60 | 源文件
61 |
62 |
63 | 源文件
64 |
65 |
66 | 源文件
67 |
68 |
69 | 源文件
70 |
71 |
72 | 源文件
73 |
74 |
75 | 源文件
76 |
77 |
78 |
79 |
80 | 资源文件
81 |
82 |
83 |
84 |
85 | 资源文件
86 |
87 |
88 |
89 |
90 | 资源文件
91 |
92 |
93 |
--------------------------------------------------------------------------------
/ImageSystem/ImageSystem.vcxproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ImageSystem.rc
5 |
6 |
--------------------------------------------------------------------------------
/ImageSystem/ImageSystemDlg.cpp:
--------------------------------------------------------------------------------
1 |
2 | // ImageSystemDlg.cpp: 实现文件
3 | //
4 |
5 | #include "pch.h"
6 | #include "framework.h"
7 | #include "ImageSystem.h"
8 | #include "ImageSystemDlg.h"
9 | #include "afxdialogex.h"
10 |
11 | #include "LinearTransformDlg.h"
12 | #include "LogTransformDlg.h"
13 | #include "GammaTransformDlg.h"
14 | #include "ErosionDlg.h"
15 |
16 | #ifdef _DEBUG
17 | #define new DEBUG_NEW
18 | #endif
19 |
20 |
21 | // CImageSystemDlg 对话框
22 |
23 |
24 |
25 | CImageSystemDlg::CImageSystemDlg(CWnd* pParent /*=nullptr*/)
26 | : CDialogEx(IDD_IMAGESYSTEM_DIALOG, pParent)
27 | {
28 | m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
29 | }
30 |
31 | void CImageSystemDlg::DoDataExchange(CDataExchange* pDX)
32 | {
33 | CDialogEx::DoDataExchange(pDX);
34 | DDX_Control(pDX, IDC_Picture1, m_p1);
35 | DDX_Control(pDX, IDC_Picture2, m_p2);
36 | }
37 |
38 | BEGIN_MESSAGE_MAP(CImageSystemDlg, CDialogEx)
39 | ON_WM_PAINT()
40 | ON_WM_QUERYDRAGICON()
41 | ON_BN_CLICKED(IDC_BUTTON1, &CImageSystemDlg::OnBnClickedButton1)
42 | ON_BN_CLICKED(IDC_BUTTON3, &CImageSystemDlg::OnBnClickedButton3)
43 | ON_COMMAND(ID_32771, &CImageSystemDlg::OnRGB_2_Gray)
44 | ON_BN_CLICKED(IDC_BUTTON4, &CImageSystemDlg::OnBnClickedButton4)
45 | ON_COMMAND(ID_32773, &CImageSystemDlg::OnEqualizeHist)
46 | ON_BN_CLICKED(IDC_BUTTON5, &CImageSystemDlg::OnBnClickedButton5)
47 | ON_COMMAND(ID_32775, &CImageSystemDlg::OnGrayscaleLinearTransform)
48 | ON_COMMAND(ID_32777, &CImageSystemDlg::OnLogTransform)
49 | ON_COMMAND(ID_32778, &CImageSystemDlg::OnGammaTransform)
50 | ON_COMMAND(ID_32779, &CImageSystemDlg::OnErosion)
51 | ON_COMMAND(ID_32780, &CImageSystemDlg::OnDilation)
52 | ON_COMMAND(ID_32784, &CImageSystemDlg::OnThresholdSegmentation)
53 | ON_COMMAND(ID_32785, &CImageSystemDlg::OnAdaptiveThreshold)
54 | ON_COMMAND(ID_32782, &CImageSystemDlg::OnRegionGrowing)
55 | ON_COMMAND(ID_32786, &CImageSystemDlg::OnSobel)
56 | ON_COMMAND(ID_32787, &CImageSystemDlg::OnCanny)
57 | ON_COMMAND(ID_32788, &CImageSystemDlg::OnMeanFilter)
58 | ON_COMMAND(ID_32789, &CImageSystemDlg::OnMedianFilter)
59 | ON_COMMAND(ID_32790, &CImageSystemDlg::OnGaussianFilter)
60 | ON_COMMAND(ID_32791, &CImageSystemDlg::OnFace)
61 | ON_BN_CLICKED(IDC_BUTTON2, &CImageSystemDlg::OnBnClickedButton2)
62 | END_MESSAGE_MAP()
63 |
64 |
65 | // CImageSystemDlg 消息处理程序
66 |
67 | BOOL CImageSystemDlg::OnInitDialog()
68 | {
69 | CDialogEx::OnInitDialog();
70 |
71 | // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
72 | // 执行此操作
73 | SetIcon(m_hIcon, TRUE); // 设置大图标
74 | SetIcon(m_hIcon, FALSE); // 设置小图标
75 |
76 | // TODO: 在此添加额外的初始化代码
77 |
78 | isopen = false;
79 |
80 | return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
81 | }
82 |
83 | // 如果向对话框添加最小化按钮,则需要下面的代码
84 | // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
85 | // 这将由框架自动完成。
86 |
87 | void CImageSystemDlg::OnPaint()
88 | {
89 | if (IsIconic())
90 | {
91 | CPaintDC dc(this); // 用于绘制的设备上下文
92 |
93 | SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0);
94 |
95 | // 使图标在工作区矩形中居中
96 | int cxIcon = GetSystemMetrics(SM_CXICON);
97 | int cyIcon = GetSystemMetrics(SM_CYICON);
98 | CRect rect;
99 | GetClientRect(&rect);
100 | int x = (rect.Width() - cxIcon + 1) / 2;
101 | int y = (rect.Height() - cyIcon + 1) / 2;
102 |
103 | // 绘制图标
104 | dc.DrawIcon(x, y, m_hIcon);
105 | }
106 | else
107 | {
108 | CDialogEx::OnPaint();
109 | }
110 | }
111 |
112 | //当用户拖动最小化窗口时系统调用此函数取得光标
113 | //显示。
114 | HCURSOR CImageSystemDlg::OnQueryDragIcon()
115 | {
116 | return static_cast(m_hIcon);
117 | }
118 |
119 |
120 |
121 | void CImageSystemDlg::OnBnClickedButton1()
122 | {
123 | // TODO: 在此添加控件通知处理程序代码
124 |
125 | TCHAR szFilter[] = _T("JPEG文件(*.jpg)|*.jpg|PNG文件(*.png)|*.png|bmp文件(*.bmp)|*.bmp||");
126 | CFileDialog fileDlg(TRUE, _T("jpg"), NULL, 0, szFilter, this);
127 |
128 | if (fileDlg.DoModal() != IDOK) //没有点确定按钮,返回
129 | return;
130 |
131 | fileName = fileDlg.GetPathName();
132 |
133 | CImage image; //创建图片对象,保存图片信息
134 | image.Load(fileName); //加载
135 | CRect rectControl; //用于存储图片控件的位置和尺寸信息
136 | m_p1.GetClientRect(rectControl); //获取图片控件位置和尺寸信息,并将这些信息保存在rectControl对象中
137 | CDC* pDc = m_p1.GetDC(); //获取与图片控件控件关联的DC
138 | image.Draw(pDc->m_hDC, rectControl); //将图像绘制在从 pDc 获得的设备上下文中,rectControl 用作绘制图像的目标矩形
139 | image.Destroy(); //销毁图片
140 | m_p1.ReleaseDC(pDc); //释放指针
141 |
142 | src = imread(fileName.GetBuffer(), 1);
143 | isopen = true;
144 | }
145 |
146 |
147 | void CImageSystemDlg::OnBnClickedButton3()
148 | {
149 | // TODO: 在此添加控件通知处理程序代码
150 | UINT i;
151 | i = MessageBox(_T("确定要退出吗?"), _T("提示"), MB_YESNO | MB_ICONQUESTION);
152 | if (i == IDYES)
153 | {
154 | //你自己的代码
155 | exit(0);
156 | }
157 |
158 | }
159 |
160 |
161 | void CImageSystemDlg::ShowDst()
162 | {
163 | CImage image; //创建图片对象,保存图片信息
164 | image.Load(TEXT("result.png")); //加载
165 | CRect rectControl; //用于存储图片控件的位置和尺寸信息
166 | m_p2.GetClientRect(rectControl); //获取图片控件位置和尺寸信息,并将这些信息保存在rectControl对象中
167 | CDC* pDc = m_p2.GetDC(); //获取与图片控件控件关联的DC
168 | image.Draw(pDc->m_hDC, rectControl); //将图像绘制在从 pDc 获得的设备上下文中,rectControl 用作绘制图像的目标矩形
169 | image.Destroy(); //销毁图片
170 | m_p2.ReleaseDC(pDc); //释放指针
171 | }
172 |
173 | void CImageSystemDlg::OnRGB_2_Gray()
174 | {
175 | // TODO: 在此添加命令处理程序代码
176 |
177 | if (isopen)
178 | {
179 | dst = ImageProcessing.RGB_2_Gray(src);
180 | imwrite("result.png", dst);
181 | ShowDst();
182 | }
183 | else
184 | {
185 | MessageBox(TEXT("请先打开图片!"), TEXT("提示"));
186 | }
187 | }
188 |
189 |
190 |
191 | void CImageSystemDlg::OnBnClickedButton4()
192 | {
193 | // TODO: 在此添加控件通知处理程序代码
194 | if (isopen)
195 | {
196 | ImageProcessing.Show_Histogram(src);
197 | }
198 | else
199 | {
200 | MessageBox(TEXT("请先打开图片!"), TEXT("提示"));
201 | }
202 | }
203 |
204 |
205 |
206 | void CImageSystemDlg::OnEqualizeHist()
207 | {
208 | // TODO: 在此添加命令处理程序代码
209 | if (isopen)
210 | {
211 | dst = ImageProcessing.EqualizeHist(src);
212 | imwrite("result.png", dst);
213 | ShowDst();
214 | }
215 | else
216 | {
217 | MessageBox(TEXT("请先打开图片!"), TEXT("提示"));
218 | }
219 | }
220 |
221 |
222 | void CImageSystemDlg::OnBnClickedButton5()
223 | {
224 | // TODO: 在此添加控件通知处理程序代码
225 | if (isopen)
226 | {
227 | dst = imread("result.png", 1);
228 | ImageProcessing.Show_Histogram(dst);
229 | }
230 | else
231 | {
232 | MessageBox(TEXT("请先打开图片!"), TEXT("提示"));
233 | }
234 | }
235 |
236 |
237 |
238 | void CImageSystemDlg::OnGrayscaleLinearTransform()
239 | {
240 | // TODO: 在此添加命令处理程序代码
241 | if (isopen)
242 | {
243 | // 定义线性变换参数
244 | double alpha = 1; // 增益
245 | double beta = -30; // 偏移
246 |
247 | LinearTransformDlg dlg;
248 | dlg.m_k = alpha;
249 | dlg.m_b = beta;
250 | if (dlg.DoModal() == IDOK)
251 | {
252 | alpha = dlg.m_k;
253 | beta = dlg.m_b;
254 | }
255 |
256 | dst = ImageProcessing.GrayscaleLinearTransform(src, alpha, beta);
257 | imwrite("result.png", dst);
258 | ShowDst();
259 | }
260 | else
261 | {
262 | MessageBox(TEXT("请先打开图片!"), TEXT("提示"));
263 | }
264 | }
265 |
266 |
267 | void CImageSystemDlg::OnLogTransform()
268 | {
269 | // TODO: 在此添加命令处理程序代码
270 | if (isopen)
271 | {
272 | // 定义对数变换参数
273 | double c = 40; // 对数变换参数
274 |
275 | LogTransformDlg dlg;
276 | dlg.m_c = c;
277 | if (dlg.DoModal() == IDOK)
278 | {
279 | c = dlg.m_c;
280 | }
281 | dst = ImageProcessing.grayscaleLogTransform(src, c);
282 | imwrite("result.png", dst);
283 | ShowDst();
284 | }
285 | else
286 | {
287 | MessageBox(TEXT("请先打开图片!"), TEXT("提示"));
288 | }
289 |
290 | }
291 |
292 |
293 | void CImageSystemDlg::OnGammaTransform()
294 | {
295 | // TODO: 在此添加命令处理程序代码
296 |
297 | if (isopen)
298 | {
299 | // 定义伽马变换参数
300 | double gamma = 0.5; // 伽马值
301 |
302 | GammaTransformDlg dlg;
303 | dlg.m_gamma = gamma;
304 | if (dlg.DoModal() == IDOK)
305 | {
306 | gamma = dlg.m_gamma;
307 | }
308 |
309 | dst = ImageProcessing.grayscaleGammaTransform(src, gamma);
310 | imwrite("result.png", dst);
311 | ShowDst();
312 | }
313 | else
314 | {
315 | MessageBox(TEXT("请先打开图片!"), TEXT("提示"));
316 | }
317 | }
318 |
319 |
320 | void CImageSystemDlg::OnErosion()
321 | {
322 | // TODO: 在此添加命令处理程序代码
323 |
324 | if (isopen)
325 | {
326 | // 定义腐蚀核尺寸
327 | int erosionSize = 3;
328 |
329 | ErosionDlg dlg;
330 | dlg.m_value = erosionSize;
331 | if (dlg.DoModal() == IDOK)
332 | {
333 | erosionSize = dlg.m_value;
334 | }
335 |
336 | dst = ImageProcessing.ImageErosion(src, erosionSize);
337 | imwrite("result.png", dst);
338 | ShowDst();
339 | }
340 | else
341 | {
342 | MessageBox(TEXT("请先打开图片!"), TEXT("提示"));
343 | }
344 |
345 | }
346 |
347 |
348 | void CImageSystemDlg::OnDilation()
349 | {
350 | // TODO: 在此添加命令处理程序代码
351 |
352 | if (isopen)
353 | {
354 | // 定义膨胀核尺寸
355 | int dilationSize = 3;
356 |
357 | ErosionDlg dlg;
358 | dlg.m_value = dilationSize;
359 | if (dlg.DoModal() == IDOK)
360 | {
361 | dilationSize = dlg.m_value;
362 | }
363 |
364 | dst = ImageProcessing.ImageDilation(src, dilationSize);
365 | imwrite("result.png", dst);
366 | ShowDst();
367 | }
368 | else
369 | {
370 | MessageBox(TEXT("请先打开图片!"), TEXT("提示"));
371 | }
372 | }
373 |
374 |
375 | void CImageSystemDlg::OnThresholdSegmentation()
376 | {
377 | // TODO: 在此添加命令处理程序代码
378 |
379 | if (isopen)
380 | {
381 | // 定义阈值
382 | int thresholdValue = 128;
383 |
384 | ErosionDlg dlg;
385 | dlg.m_value = thresholdValue;
386 | if (dlg.DoModal() == IDOK)
387 | {
388 | thresholdValue = dlg.m_value;
389 | }
390 |
391 | dst = ImageProcessing.imageThresholdSegmentation(src, thresholdValue);
392 | imwrite("result.png", dst);
393 | ShowDst();
394 | }
395 | else
396 | {
397 | MessageBox(TEXT("请先打开图片!"), TEXT("提示"));
398 | }
399 | }
400 |
401 |
402 | void CImageSystemDlg::OnAdaptiveThreshold()
403 | {
404 | // TODO: 在此添加命令处理程序代码
405 |
406 | if (isopen)
407 | {
408 | // 定义自适应阈值分割参数
409 | int blockSize = 11; // 邻域大小,奇数
410 | int subtractValue = 10; // 阈值修正值
411 |
412 | dst = ImageProcessing.adaptiveThresholdSegmentation(src, blockSize, subtractValue);
413 | imwrite("result.png", dst);
414 | ShowDst();
415 | }
416 | else
417 | {
418 | MessageBox(TEXT("请先打开图片!"), TEXT("提示"));
419 | }
420 |
421 | }
422 |
423 |
424 | void CImageSystemDlg::OnRegionGrowing()
425 | {
426 | // TODO: 在此添加命令处理程序代码
427 | if (isopen)
428 | {
429 | // 定义种子点和阈值
430 | int seedX = 100; // 种子点的X坐标
431 | int seedY = 100; // 种子点的Y坐标
432 | int threshold = 50; // 阈值
433 |
434 | ErosionDlg dlg;
435 | dlg.m_value = threshold;
436 | if (dlg.DoModal() == IDOK)
437 | {
438 | threshold = dlg.m_value;
439 | }
440 |
441 | dst = ImageProcessing.regionGrowingSegmentation(src, seedX, seedY, threshold);
442 | imwrite("result.png", dst);
443 | ShowDst();
444 | }
445 | else
446 | {
447 | MessageBox(TEXT("请先打开图片!"), TEXT("提示"));
448 | }
449 | }
450 |
451 |
452 | void CImageSystemDlg::OnSobel()
453 | {
454 | // TODO: 在此添加命令处理程序代码
455 | if (isopen)
456 | { // 定义Sobel核大小
457 | int kernelSize = 3;
458 |
459 | dst = ImageProcessing.sobelEdgeDetection(src, kernelSize);
460 | imwrite("result.png", dst);
461 | ShowDst();
462 | }
463 | else
464 | {
465 | MessageBox(TEXT("请先打开图片!"), TEXT("提示"));
466 | }
467 | }
468 |
469 |
470 | void CImageSystemDlg::OnCanny()
471 | {
472 | // TODO: 在此添加命令处理程序代码
473 | if (isopen)
474 | {
475 | // 定义Canny边缘检测的两个阈值
476 | double threshold1 = 50; // 低阈值
477 | double threshold2 = 150; // 高阈值
478 |
479 | dst = ImageProcessing.cannyEdgeDetection(src, threshold1, threshold2);
480 | imwrite("result.png", dst);
481 | ShowDst();
482 | }
483 | else
484 | {
485 | MessageBox(TEXT("请先打开图片!"), TEXT("提示"));
486 | }
487 | }
488 |
489 |
490 | void CImageSystemDlg::OnMeanFilter()
491 | {
492 | // TODO: 在此添加命令处理程序代码
493 | if (isopen)
494 | {
495 | // 定义均值滤波的核大小
496 | int kernelSize = 5;
497 |
498 | dst = ImageProcessing.meanFilter(src, kernelSize);
499 | imwrite("result.png", dst);
500 | ShowDst();
501 | }
502 | else
503 | {
504 | MessageBox(TEXT("请先打开图片!"), TEXT("提示"));
505 | }
506 | }
507 |
508 |
509 | void CImageSystemDlg::OnMedianFilter()
510 | {
511 | // TODO: 在此添加命令处理程序代码
512 | if (isopen)
513 | {
514 | // 定义均值滤波的核大小
515 | int kernelSize = 7;
516 |
517 | dst = ImageProcessing.medianFilter(src, kernelSize);
518 | imwrite("result.png", dst);
519 | ShowDst();
520 | }
521 | else
522 | {
523 | MessageBox(TEXT("请先打开图片!"), TEXT("提示"));
524 | }
525 | }
526 |
527 |
528 | void CImageSystemDlg::OnGaussianFilter()
529 | {
530 | // TODO: 在此添加命令处理程序代码
531 | if (isopen)
532 | {
533 | // 定义高斯滤波的核大小和标准差
534 | int kernelSize = 5;
535 | double sigma = 2.0;
536 |
537 | dst = ImageProcessing.gaussianFilter(src, kernelSize, sigma);
538 | imwrite("result.png", dst);
539 | ShowDst();
540 | }
541 | else
542 | {
543 | MessageBox(TEXT("请先打开图片!"), TEXT("提示"));
544 | }
545 | }
546 |
547 |
548 | void CImageSystemDlg::OnFace()
549 | {
550 | // TODO: 在此添加命令处理程序代码
551 | if (isopen)
552 | {
553 | dst = ImageProcessing.detectFaces(src);
554 | imwrite("result.png", dst);
555 | ShowDst();
556 | src = imread(fileName.GetBuffer(), 1);
557 | }
558 | else
559 | {
560 | MessageBox(TEXT("请先打开图片!"), TEXT("提示"));
561 | }
562 | }
563 |
564 |
565 | void CImageSystemDlg::OnBnClickedButton2()
566 | {
567 | // TODO: 在此添加控件通知处理程序代码
568 | if (isopen)
569 | {
570 | CWnd* bmpShow = GetDlgItem(IDC_Picture2);
571 | CDC* pdc = bmpShow->GetDC();
572 | CImage imag;
573 | CRect rect;
574 |
575 | GetClientRect(&rect); //获取画布大小
576 | bmpShow->GetWindowRect(&rect);
577 | imag.Create(rect.Width(), rect.Height(), 32);
578 | ::BitBlt(imag.GetDC(), 0, 0, rect.Width(), rect.Height(), pdc->m_hDC, 0, 0, SRCCOPY);
579 |
580 | TCHAR szFilter[] = _T("jpg file(*.jpg)|*.jpg|bmp file(*.bmp)|*.bmp|所有文件(*.*)|*.*||"); //文件格式过滤
581 | // 构造保存文件对话框
582 | CFileDialog fileDlg(FALSE, _T("jpg"), _T("*.jpg"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this);
583 | fileDlg.m_ofn.lpstrTitle = _T("保存图像"); //保存对话窗口标题名
584 | CString picturePath;
585 | if (IDOK == fileDlg.DoModal()) //按下确认键
586 | {
587 | picturePath = fileDlg.GetPathName(); //文件路径
588 | }
589 |
590 | HRESULT hResult = imag.Save(picturePath); //保存图片
591 | ReleaseDC(pdc);
592 | imag.ReleaseDC();
593 | }
594 | else
595 | {
596 | MessageBox(TEXT("请先打开图片!"), TEXT("提示"));
597 | }
598 | }
599 |
--------------------------------------------------------------------------------
/ImageSystem/ImageSystemDlg.h:
--------------------------------------------------------------------------------
1 |
2 | // ImageSystemDlg.h: 头文件
3 | //
4 |
5 | #include "CImageProcessing.h"
6 |
7 | #pragma once
8 |
9 |
10 | // CImageSystemDlg 对话框
11 | class CImageSystemDlg : public CDialogEx
12 | {
13 | // 构造
14 | public:
15 | CImageSystemDlg(CWnd* pParent = nullptr); // 标准构造函数
16 |
17 | // 对话框数据
18 | #ifdef AFX_DESIGN_TIME
19 | enum { IDD = IDD_IMAGESYSTEM_DIALOG };
20 | #endif
21 |
22 | protected:
23 | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
24 |
25 |
26 | // 实现
27 | protected:
28 | HICON m_hIcon;
29 |
30 | // 生成的消息映射函数
31 | virtual BOOL OnInitDialog();
32 | afx_msg void OnPaint();
33 | afx_msg HCURSOR OnQueryDragIcon();
34 | DECLARE_MESSAGE_MAP()
35 | public:
36 | CStatic m_p1;
37 | CStatic m_p2;
38 | CString fileName;
39 | afx_msg void OnBnClickedButton1();
40 | afx_msg void OnBnClickedButton3();
41 |
42 | Mat src; //原始图像
43 | Mat dst; //处理后的图像
44 | void ShowDst();
45 |
46 | CImageProcessing ImageProcessing;
47 | afx_msg void OnRGB_2_Gray();
48 | afx_msg void OnBnClickedButton4();
49 | afx_msg void OnEqualizeHist();
50 | afx_msg void OnBnClickedButton5();
51 | afx_msg void OnGrayscaleLinearTransform();
52 | afx_msg void OnLogTransform();
53 | afx_msg void OnGammaTransform();
54 | afx_msg void OnErosion();
55 | afx_msg void OnDilation();
56 | afx_msg void OnThresholdSegmentation();
57 | afx_msg void OnAdaptiveThreshold();
58 | afx_msg void OnRegionGrowing();
59 | afx_msg void OnSobel();
60 | afx_msg void OnCanny();
61 | afx_msg void OnMeanFilter();
62 | afx_msg void OnMedianFilter();
63 | afx_msg void OnGaussianFilter();
64 | afx_msg void OnFace();
65 | afx_msg void OnBnClickedButton2();
66 |
67 | bool isopen;
68 | };
69 |
--------------------------------------------------------------------------------
/ImageSystem/LinearTransformDlg.cpp:
--------------------------------------------------------------------------------
1 | // LinearTransformDlg.cpp: 实现文件
2 | //
3 |
4 | #include "pch.h"
5 | #include "ImageSystem.h"
6 | #include "LinearTransformDlg.h"
7 | #include "afxdialogex.h"
8 |
9 |
10 | // LinearTransformDlg 对话框
11 |
12 | IMPLEMENT_DYNAMIC(LinearTransformDlg, CDialogEx)
13 |
14 | LinearTransformDlg::LinearTransformDlg(CWnd* pParent /*=nullptr*/)
15 | : CDialogEx(IDD_LinearTransformDlg, pParent)
16 | , m_k(0)
17 | , m_b(0)
18 | {
19 |
20 | }
21 |
22 | LinearTransformDlg::~LinearTransformDlg()
23 | {
24 | }
25 |
26 | void LinearTransformDlg::DoDataExchange(CDataExchange* pDX)
27 | {
28 | CDialogEx::DoDataExchange(pDX);
29 | DDX_Text(pDX, IDC_EDIT1, m_k);
30 | DDX_Text(pDX, IDC_EDIT2, m_b);
31 | }
32 |
33 |
34 | BEGIN_MESSAGE_MAP(LinearTransformDlg, CDialogEx)
35 | ON_BN_CLICKED(IDOK, &LinearTransformDlg::OnBnClickedOk)
36 | END_MESSAGE_MAP()
37 |
38 |
39 | // LinearTransformDlg 消息处理程序
40 |
41 |
42 | void LinearTransformDlg::OnBnClickedOk()
43 | {
44 | // TODO: 在此添加控件通知处理程序代码
45 |
46 | UpdateData(TRUE);
47 |
48 | CDialogEx::OnOK();
49 | }
50 |
--------------------------------------------------------------------------------
/ImageSystem/LinearTransformDlg.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 |
4 | // LinearTransformDlg 对话框
5 |
6 | class LinearTransformDlg : public CDialogEx
7 | {
8 | DECLARE_DYNAMIC(LinearTransformDlg)
9 |
10 | public:
11 | LinearTransformDlg(CWnd* pParent = nullptr); // 标准构造函数
12 | virtual ~LinearTransformDlg();
13 |
14 | // 对话框数据
15 | #ifdef AFX_DESIGN_TIME
16 | enum { IDD = IDD_LinearTransformDlg };
17 | #endif
18 |
19 | protected:
20 | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
21 |
22 | DECLARE_MESSAGE_MAP()
23 | public:
24 | double m_k;
25 | double m_b;
26 | afx_msg void OnBnClickedOk();
27 | };
28 |
--------------------------------------------------------------------------------
/ImageSystem/LogTransformDlg.cpp:
--------------------------------------------------------------------------------
1 | // LogTransformDlg.cpp: 实现文件
2 | //
3 |
4 | #include "pch.h"
5 | #include "ImageSystem.h"
6 | #include "LogTransformDlg.h"
7 | #include "afxdialogex.h"
8 |
9 |
10 | // LogTransformDlg 对话框
11 |
12 | IMPLEMENT_DYNAMIC(LogTransformDlg, CDialogEx)
13 |
14 | LogTransformDlg::LogTransformDlg(CWnd* pParent /*=nullptr*/)
15 | : CDialogEx(IDD_LogTransformDlg, pParent)
16 | , m_c(0)
17 | {
18 |
19 | }
20 |
21 | LogTransformDlg::~LogTransformDlg()
22 | {
23 | }
24 |
25 | void LogTransformDlg::DoDataExchange(CDataExchange* pDX)
26 | {
27 | CDialogEx::DoDataExchange(pDX);
28 | DDX_Text(pDX, IDC_EDIT1, m_c);
29 | }
30 |
31 |
32 | BEGIN_MESSAGE_MAP(LogTransformDlg, CDialogEx)
33 | ON_BN_CLICKED(IDOK, &LogTransformDlg::OnBnClickedOk)
34 | END_MESSAGE_MAP()
35 |
36 |
37 | // LogTransformDlg 消息处理程序
38 |
39 |
40 | void LogTransformDlg::OnBnClickedOk()
41 | {
42 | // TODO: 在此添加控件通知处理程序代码
43 | UpdateData(TRUE);
44 |
45 | CDialogEx::OnOK();
46 | }
47 |
--------------------------------------------------------------------------------
/ImageSystem/LogTransformDlg.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 |
4 | // LogTransformDlg 对话框
5 |
6 | class LogTransformDlg : public CDialogEx
7 | {
8 | DECLARE_DYNAMIC(LogTransformDlg)
9 |
10 | public:
11 | LogTransformDlg(CWnd* pParent = nullptr); // 标准构造函数
12 | virtual ~LogTransformDlg();
13 |
14 | // 对话框数据
15 | #ifdef AFX_DESIGN_TIME
16 | enum { IDD = IDD_LogTransformDlg };
17 | #endif
18 |
19 | protected:
20 | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
21 |
22 | DECLARE_MESSAGE_MAP()
23 | public:
24 | double m_c;
25 | afx_msg void OnBnClickedOk();
26 | };
27 |
--------------------------------------------------------------------------------
/ImageSystem/framework.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #ifndef VC_EXTRALEAN
4 | #define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料
5 | #endif
6 |
7 | #include "targetver.h"
8 |
9 | #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将是显式的
10 |
11 | // 关闭 MFC 的一些常见且经常可放心忽略的隐藏警告消息
12 | #define _AFX_ALL_WARNINGS
13 |
14 | #include // MFC 核心组件和标准组件
15 | #include // MFC 扩展
16 |
17 |
18 | #include // MFC 自动化类
19 |
20 |
21 |
22 | #ifndef _AFX_NO_OLE_SUPPORT
23 | #include // MFC 对 Internet Explorer 4 公共控件的支持
24 | #endif
25 | #ifndef _AFX_NO_AFXCMN_SUPPORT
26 | #include // MFC 对 Windows 公共控件的支持
27 | #endif // _AFX_NO_AFXCMN_SUPPORT
28 |
29 | #include // MFC 支持功能区和控制条
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 | //#ifdef _UNICODE
40 | #if defined _M_IX86
41 | #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
42 | #elif defined _M_X64
43 | #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
44 | #else
45 | #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
46 | #endif
47 | //#endif
48 |
49 |
50 |
--------------------------------------------------------------------------------
/ImageSystem/pch.cpp:
--------------------------------------------------------------------------------
1 | // pch.cpp: 与预编译标头对应的源文件
2 |
3 | #include "pch.h"
4 |
5 | // 当使用预编译的头时,需要使用此源文件,编译才能成功。
6 |
--------------------------------------------------------------------------------
/ImageSystem/pch.h:
--------------------------------------------------------------------------------
1 | // pch.h: 这是预编译标头文件。
2 | // 下方列出的文件仅编译一次,提高了将来生成的生成性能。
3 | // 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。
4 | // 但是,如果此处列出的文件中的任何一个在生成之间有更新,它们全部都将被重新编译。
5 | // 请勿在此处添加要频繁更新的文件,这将使得性能优势无效。
6 |
7 | #ifndef PCH_H
8 | #define PCH_H
9 |
10 | // 添加要在此处预编译的标头
11 | #include "framework.h"
12 |
13 | #include
14 | #include
15 |
16 | using namespace std;
17 | using namespace cv;
18 |
19 | #endif //PCH_H
20 |
--------------------------------------------------------------------------------
/ImageSystem/res/ImageSystem.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mouseminar/MFC-ImageSystem/248e7489753cebf017d3b41c5b6ee18c595ba3c7/ImageSystem/res/ImageSystem.ico
--------------------------------------------------------------------------------
/ImageSystem/res/ImageSystem.rc2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mouseminar/MFC-ImageSystem/248e7489753cebf017d3b41c5b6ee18c595ba3c7/ImageSystem/res/ImageSystem.rc2
--------------------------------------------------------------------------------
/ImageSystem/res/lenna.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mouseminar/MFC-ImageSystem/248e7489753cebf017d3b41c5b6ee18c595ba3c7/ImageSystem/res/lenna.jpg
--------------------------------------------------------------------------------
/ImageSystem/res/两张人脸.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mouseminar/MFC-ImageSystem/248e7489753cebf017d3b41c5b6ee18c595ba3c7/ImageSystem/res/两张人脸.png
--------------------------------------------------------------------------------
/ImageSystem/res/噪声图片.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mouseminar/MFC-ImageSystem/248e7489753cebf017d3b41c5b6ee18c595ba3c7/ImageSystem/res/噪声图片.png
--------------------------------------------------------------------------------
/ImageSystem/resource.h:
--------------------------------------------------------------------------------
1 | //{{NO_DEPENDENCIES}}
2 | // Microsoft Visual C++ 生成的包含文件。
3 | // 供 ImageSystem.rc 使用
4 | //
5 | #define IDD_IMAGESYSTEM_DIALOG 102
6 | #define IDR_MAINFRAME 128
7 | #define IDR_MENU1 130
8 | #define IDD_LinearTransformDlg 131
9 | #define IDD_LogTransformDlg 133
10 | #define IDD_GammaTransformDlg 135
11 | #define IDD_ErosionDlg 137
12 | #define IDC_Picture1 1000
13 | #define IDC_Picture2 1001
14 | #define IDC_BUTTON1 1002
15 | #define IDC_BUTTON2 1003
16 | #define IDC_EDIT1 1003
17 | #define IDC_BUTTON3 1004
18 | #define IDC_EDIT2 1004
19 | #define IDC_BUTTON4 1005
20 | #define IDC_BUTTON5 1006
21 | #define ID_32771 32771
22 | #define ID_32772 32772
23 | #define ID_32773 32773
24 | #define ID_32774 32774
25 | #define ID_32775 32775
26 | #define ID_32776 32776
27 | #define ID_32777 32777
28 | #define ID_32778 32778
29 | #define ID_32779 32779
30 | #define ID_32780 32780
31 | #define ID_32781 32781
32 | #define ID_32782 32782
33 | #define ID_32783 32783
34 | #define ID_32784 32784
35 | #define ID_32785 32785
36 | #define ID_32786 32786
37 | #define ID_32787 32787
38 | #define ID_32788 32788
39 | #define ID_32789 32789
40 | #define ID_32790 32790
41 | #define ID_32791 32791
42 |
43 | // Next default values for new objects
44 | //
45 | #ifdef APSTUDIO_INVOKED
46 | #ifndef APSTUDIO_READONLY_SYMBOLS
47 | #define _APS_NEXT_RESOURCE_VALUE 139
48 | #define _APS_NEXT_COMMAND_VALUE 32792
49 | #define _APS_NEXT_CONTROL_VALUE 1004
50 | #define _APS_NEXT_SYMED_VALUE 101
51 | #endif
52 | #endif
53 |
--------------------------------------------------------------------------------
/ImageSystem/result.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mouseminar/MFC-ImageSystem/248e7489753cebf017d3b41c5b6ee18c595ba3c7/ImageSystem/result.png
--------------------------------------------------------------------------------
/ImageSystem/targetver.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | // 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。
4 |
5 | //如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并
6 | // 将 _WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。
7 |
8 | #include
9 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # MFC-ImageSystem
2 | MFC图像处理系统,使用Opencv库,完成了图像的灰度变换、形态学操作、图像分割、图像滤波、边缘检测、人脸检测等功能。
3 |
4 | b站观看全过程开发视频:https://www.bilibili.com/video/BV1Hj411m7uh/?spm_id_from=333.999.0.0&vd_source=07c44be34f0e73ec66347ccd7aa3908e
5 |
--------------------------------------------------------------------------------