├── 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 | --------------------------------------------------------------------------------