// Child_Dlg1.cpp: 实现文件
//
#include "pch.h"
#include "MFCImage.h"
#include "Child_Dlg1.h"
#include "Child_Dlg2.h"
#include "MainFrm.h"
#include "Resize_Dlg.h"
#include "DBD_Dlg.h"
#include "LD_Dlg.h"
#include "GSZH_Dlg.h"
// Child_Dlg1
IMPLEMENT_DYNCREATE(Child_Dlg1, CFormView)
Child_Dlg1::Child_Dlg1()
: CFormView(IDD_Child_Dlg1)
{
choose = false;
process = false;
}
Child_Dlg1::~Child_Dlg1()
{
}
void Child_Dlg1::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(Child_Dlg1, CFormView)
ON_COMMAND(ID_32772, &Child_Dlg1::OnOpen)
ON_WM_PAINT()
ON_COMMAND(ID_ZFT, &Child_Dlg1::OnZft)
ON_COMMAND(ID_32774, &Child_Dlg1::OnSave)
ON_COMMAND(ID_32777, &Child_Dlg1::OnGSZH)
ON_COMMAND(ID_32778, &Child_Dlg1::OnSXFD)
ON_COMMAND(ID_32781, &Child_Dlg1::OnSSZXZ)
ON_COMMAND(ID_32782, &Child_Dlg1::OnNSZXZ)
ON_COMMAND(ID_32783, &Child_Dlg1::OnFZ)
ON_COMMAND(ID_32780, &Child_Dlg1::OnJX)
ON_COMMAND(ID_32784, &Child_Dlg1::OnHDH)
ON_COMMAND(ID_32785, &Child_Dlg1::OnDBD)
ON_COMMAND(ID_32786, &Child_Dlg1::OnLD)
ON_COMMAND(ID_32787, &Child_Dlg1::OnZFTJHH)
ON_COMMAND(ID_32789, &Child_Dlg1::OnLYPH)
ON_COMMAND(ID_32790, &Child_Dlg1::OnJQPH)
ON_COMMAND(ID_32791, &Child_Dlg1::OnGSPH)
ON_COMMAND(ID_32792, &Child_Dlg1::OnZZPH)
ON_COMMAND(ID_32793, &Child_Dlg1::OnRH)
ON_COMMAND(ID_32794, &Child_Dlg1::OnFD)
ON_COMMAND(ID_32800, &Child_Dlg1::OnHSLJ)
ON_COMMAND(ID_32801, &Child_Dlg1::OnLSLJ)
ON_COMMAND(ID_32802, &Child_Dlg1::OnBuleFilter)
ON_COMMAND(ID_32796, &Child_Dlg1::OnFX)
ON_COMMAND(ID_32797, &Child_Dlg1::OnCZBY)
ON_COMMAND(ID_32798, &Child_Dlg1::OnYHXG)
ON_COMMAND(ID_32799, &Child_Dlg1::OnMSK)
END_MESSAGE_MAP()
// Child_Dlg1 诊断
#ifdef _DEBUG
void Child_Dlg1::AssertValid() const
{
CFormView::AssertValid();
}
#ifndef _WIN32_WCE
void Child_Dlg1::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif
#endif //_DEBUG
// Child_Dlg1 消息处理程序
void Child_Dlg1::OnPaint()
{
if (choose)
{
CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect);
CImage image;
image.Load(StrFilePath);
image.BitBlt(dc, 0, 40, rect.Width(), rect.Height(), 0, 0);
image.Destroy(); //没有Destroy()会有内存泄漏。Detach();不行的。
}
}
void Child_Dlg1::OnOpen()
{
// TODO: 在此添加命令处理程序代码
CFileDialog fileDlg(TRUE, _T("png"), NULL, 0, _T("image Files(*.bmp; *.jpeg;*.jpg;*.png)|*.JPG;*.PNG;*.BMP|All Files (*.*) |*.*|"), this);
fileDlg.DoModal();
StrFilePath = fileDlg.GetPathName();
StrFileName = fileDlg.GetFileName();
if (StrFilePath == _T(""))
{
return;
}
choose = true;
src = imread(StrFilePath.GetBuffer());
Invalidate();
}
void Child_Dlg1::OnZft()
{
// TODO: 在此添加命令处理程序代码
if (!choose)
{
//MessageBox(TEXT("请先选择图片!"), TEXT("提示"));
return;
}
Mat matRGB[3];
split(src, matRGB);
int Channels[] = { 0 };
int nHistSize[] = { 256 };
float range[] = { 0, 255 };
const float* fHistRanges[] = { range };
Mat histR, histG, histB;
// 计算直方图
calcHist(&matRGB[0], 1, Channels, Mat(), histB, 1, nHistSize, fHistRanges, true, false);
calcHist(&matRGB[1], 1, Channels, Mat(), histG, 1, nHistSize, fHistRanges, true, false);
calcHist(&matRGB[2], 1, Channels, Mat(), histR, 1, nHistSize, fHistRanges, true, false);
// 创建直方图画布
int nHistWidth = 800;
int nHistHeight = 600;
int nBinWidth = cvRound((double)nHistWidth / nHistSize[0]);
Mat matHistImage(nHistHeight, nHistWidth, CV_8UC3, Scalar(255, 255, 255));
// 直方图归一化
normalize(histB, histB, 0.0, matHistImage.rows, NORM_MINMAX, -1, Mat());
normalize(histG, histG, 0.0, matHistImage.rows, NORM_MINMAX, -1, Mat());
normalize(histR, histR, 0.0, matHistImage.rows, NORM_MINMAX, -1, Mat());
// 在直方图中画出直方图
for (int i = 1; i < nHistSize[0]; i++)
{
line(matHistImage,
Point(nBinWidth * (i - 1), nHistHeight - cvRound(histB.at<float>(i - 1))),
Point(nBinWidth * (i), nHistHeight - cvRound(histB.at<float>(i))),
Scalar(255, 0, 0),
2,
8,
0);
line(matHistImage,
Point(nBinWidth * (i - 1), nHistHeight - cvRound(histG.at<float>(i - 1))),
Point(nBinWidth * (i), nHistHeight - cvRound(histG.at<float>(i))),
Scalar(0, 255, 0),
2,
8,
0);
line(matHistImage,
Point(nBinWidth * (i - 1), nHistHeight - cvRound(histR.at<float>(i - 1))),
Point(nBinWidth * (i), nHistHeight - cvRound(histR.at<float>(i))),
Scalar(0, 0, 255),
2,
8,
0);
}
// 显示直方图
//imshow("histogram", matHistImage);
imwrite("result.png", matHistImage);
process = true;
CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
Child_Dlg2* pDlg = pMainFrame->GetChildDlg2();
if (pDlg != nullptr)
{
pDlg->Invalidate();
pDlg = nullptr;
}
}
void Child_Dlg1::OnSave()
{
// TODO: 在此添加命令处理程序代码
if (!choose)
{
//MessageBox(TEXT("请先选择图片!"), TEXT("提示"));
return;
}
if (!process)
{
//MessageBox(TEXT("请先选择图片!"), TEXT("提示"));
return;
}
TCHAR szFilter[] = _T("jpg file(*.jpg)|*.jpg|bmp file(*.bmp)|*.bmp|所有文件(*.*)|*.*||"); //文件格式过滤
// 构造保存文件对话框
CFileDialog fileDlg(FALSE, _T("jpg"), _T("*.jpg"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this);
fileDlg.m_ofn.lpstrTitle = _T("保存图像"); //保存对话窗口标题名
CString picturePath;
if (IDOK == fileDlg.DoModal()) //按下确认键
{
picturePath = fileDlg.GetPathName(); //文件路径
MessageBox(TEXT("保存成功!"));
}
CImage image;
image.Load("result.png");
image.Save(picturePath); //保存图片
image.Destroy();
}
void Child_Dlg1::OnGSZH()
{
// TODO: 在此添加命令处理程序代码
if (!choose)
{
//MessageBox(TEXT("请先选择图片!"), TEXT("提示"));
return;
}
process = true;
GSZH_Dlg dlg;
if (dlg.DoModal() == IDOK)
{
CString str;
str = dlg.m_name + TEXT(".") + dlg.m_form;
imwrite(str.GetBuffer(), src);
MessageBox(TEXT("格式转换成功!"));
}
}
//调整大小函数:最近邻插值:该方法将目标图像中的每个像素与原始图像中最接近的像素进行匹配。
//这种方法简单快速,但可能会导致图像边缘的锯齿状效果。
Mat Child_Dlg1::resizeImageNearestNeighbor(const Mat image, int targetWidth, int targetHeight)
{
Mat resizedImage(targetHeight, targetWidth, image.type());
// 计算缩放比例
float scaleX = static_cast<float>(image.cols) / targetWidth;
float scaleY = static_cast<float>(image.rows) / targetHeight;
for (int y = 0; y < targetHeight; y++) {
for (int x = 0; x < targetWidth; x++) {
// 计算原始图像中最近的像素坐标
int srcX = static_cast<int>(x * scaleX);
int srcY = static_cast<int>(y * scaleY);
// 获取最近邻像素的值并赋给调整后的图像
resizedImage.at<cv::Vec3b>(y, x) = image.at<cv::Vec3b>(srcY, srcX);
}
}
return resizedImage;
}
void Child_Dlg1::OnSXFD()
{
// TODO: 在此添加命令处理程序代码
process = true;
if (!choose)
{
//MessageBox(TEXT("请先选择图片!"), TEXT("提示"));
return;
}
//dlg = new Resize_Dlg;
//dlg->m_l = src.rows;
//dlg->m_h = src.cols;
//dlg->m_pParentDlg = this; // 将父对话框的指针赋值给子对话框的成员变量
//dlg->Create(IDD_Resize_Dlg);
//dlg->ShowWindow(SW_SHOWNORMAL);
Resize_Dlg dlg;
dlg.m_h = src.rows;
dlg.m_l = src.cols;
if (dlg.DoModal() == IDOK)
{
out = resizeImageNearestNeighbor(src, dlg.m_l, dlg.m_h);
imwrite("result.png", out);
process = true;
CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
Child_Dlg2* pDlg = pMainFrame->GetChildDlg2();
if (pDlg != nullptr)
{
pDlg->Invalidate();
}
}
}
//顺时针旋转90°
Mat Child_Dlg1::rotateImage90Clockwise(const Mat inputImage) {
// 获取输入图像的尺寸
int rows = inputImage.rows;
int cols = inputImage.cols;
// 创建一个新的图像,尺寸为旋转后
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
MFC图像处理系统,基于单文档,使用Opencv - 小白不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
资源推荐
资源详情
资源评论
收起资源包目录
MFC-Image-master.zip (73个子文件)
MFC-Image-master
MFCImage.sln 1KB
MFCImage
MFCImage.vcxproj 12KB
out.png 96KB
MFCImageView.h 1KB
Child_Dlg1.cpp 33KB
Resize_Dlg.cpp 1KB
OutputWnd.cpp 5KB
ViewTree.h 369B
MFCImageDoc.cpp 3KB
Child_Dlg2.cpp 1KB
Child_Dlg1.h 3KB
Child_Dlg2.h 627B
resource.h 6KB
framework.h 1KB
GSZH_Dlg.cpp 1KB
MFCImageView.cpp 2KB
MainFrm.cpp 13KB
MFCImageDoc.h 868B
ViewTree.cpp 913B
FileView.cpp 7KB
OutputWnd.h 991B
res
explorer_hc.bmp 776B
sort_hc.bmp 1KB
properties_wnd.ico 1KB
menuimages.bmp 1KB
classview_hc.bmp 5KB
output_wnd.ico 1KB
file_view_hc.ico 2KB
output_wnd_hc.ico 2KB
MFCImage.ico 66KB
class_view.ico 1KB
menuimages_hc.bmp 6KB
Toolbar.bmp 1KB
MFCImage.rc2 672B
fileview_hc.bmp 2KB
fileview.bmp 478B
class_view_hc.ico 2KB
Toolbar256.bmp 6KB
properties_wnd_hc.ico 2KB
sort.bmp 358B
properties.bmp 598B
MFCImageDoc.ico 5KB
explorer.bmp 238B
file_view.ico 1KB
userimages.bmp 8KB
properties_hc.bmp 3KB
classview.bmp 958B
Resize_Dlg.h 580B
PropertiesWnd.h 1KB
pch.h 784B
DBD_Dlg.h 473B
CGlobal.h 156B
MainFrm.h 2KB
result.png 596KB
MFCImage.rc 42KB
DBD_Dlg.cpp 958B
CGlobal.cpp 177B
MFCImage.vcxproj.user 229B
LD_Dlg.cpp 950B
pch.cpp 153B
GSZH_Dlg.h 549B
FileView.h 1KB
Images
lenna.jpg 50KB
train.jpg 73KB
ClassView.h 1KB
PropertiesWnd.cpp 9KB
MFCImage.aps 158KB
MFCImage.vcxproj.filters 7KB
MFCImage.cpp 5KB
ClassView.cpp 9KB
targetver.h 287B
MFCImage.h 667B
LD_Dlg.h 464B
共 73 条
- 1
资源评论
- cherish5722024-04-12资源很好用,有较大的参考价值,资源不错,支持一下。
机智的程序员zero
- 粉丝: 1548
- 资源: 4128
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功