CImage对象使用罗伯特算子进行边缘检测
1 在新插入的对话框中添加两个Picture Control和两个Button
2 打开图像代码和显示图像代码和前面两篇博文类似
BEGIN_MESSAGE_MAP(CEdgeDetDlg, CDialogEx)ON_WM_PAINT()ON_BN_CLICKED(IDC_OPEN_BTN, &CEdgeDetDlg::OnClickedOpenBtn)ON_BN_CLICKED(IDC_EDGE_DETECTION_BTN, &CEdgeDetDlg::OnClickedEdgeDetectionBtn)
END_MESSAGE_MAP()// CEdgeDetDlg 消息处理程序void CEdgeDetDlg::OnClickedOpenBtn()
{// TODO: 在此添加控件通知处理程序代码CFileDialog dlg(TRUE,_T(".bmp"),_T("*.jpg"),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("Bit Map(*.bmp)|*.bmp|JPEG Map(*.jpg)|*.jpg||"));if(dlg.DoModal() == IDOK){if(!yuantu.IsNull()){yuantu.Destroy();}yuantu.Load(dlg.GetPathName());Invalidate(FALSE);}
}//边缘检测
void CEdgeDetDlg::OnClickedEdgeDetectionBtn()
{if (yuantu.IsNull()){MessageBox(_T("还未打开图像"),_T("系统提示"),MB_OK);return;}if(!bianyuantu.IsNull()){bianyuantu.Destroy();}int i,j,temp;int pixel[4];int width = yuantu.GetWidth();int height = yuantu.GetHeight();int widthBytes = yuantu.GetPitch();bianyuantu.Create(width,height,yuantu.GetBPP());if(yuantu.IsIndexed()){yuantu.GetColorTable(0,256,colorTable);bianyuantu.SetColorTable(0,256,colorTable);}BYTE *pYuantuData = (BYTE*)yuantu.GetBits();BYTE *pBianyuantuData =(BYTE*)bianyuantu.GetBits();for(j=0;j<height-1;j++){for(i=0;i<width-1;i++){pixel[0]=pYuantuData[j*widthBytes+i];pixel[1]=pYuantuData[j*widthBytes+i+1];pixel[2]=pYuantuData[(j+1)*widthBytes+i];pixel[3]=pYuantuData[(j+1)*widthBytes+i+1];temp=(int)sqrt((double)((pixel[0]-pixel[3])*(pixel[0]-pixel[3])+(pixel[1]-pixel[2])*(pixel[1]-pixel[2])));pBianyuantuData[j*widthBytes+i]=temp;}}Invalidate(FALSE);
}void CEdgeDetDlg::OnPaint()
{if (IsIconic()){CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else{CDialogEx::OnPaint();if(!yuantu.IsNull()){CWnd* pWndYuantu = this->GetDlgItem(IDC_YUANTU);CDC* pdc = pWndYuantu->GetDC();yuantu.Draw(pdc->GetSafeHdc(), 0, 0);pWndYuantu->ReleaseDC(pdc);}if(!bianyuantu.IsNull()){CWnd* pWndBianyuantu = this->GetDlgItem(IDC_BIANYUANTU);CDC* pdc = pWndBianyuantu->GetDC();bianyuantu.Draw(pdc->GetSafeHdc(), 0, 0);pWndBianyuantu->ReleaseDC(pdc);}}
}
测试时用的是灰度图像,实现效果如下:
转载:http://blog.csdn.net/foreverling/article/details/40116763
CImage对象使用罗伯特算子进行边缘检测相关推荐
- 利用Canny边缘检测算子进行边缘检测的原理及OpenCV代码实现
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 Canny算子是John Canny在1986年 ...
- OpenCV_08 边缘检测:Sobel检测算子+Laplacian算子+Canny边缘检测
1 原理 边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点.图像属性中的显著变化通常反映了属性的重要事件和变化.边缘的表现形式如下图所示: 图像边缘检测大幅度 ...
- canny算子_Canny边缘检测算法
PS:计算机视觉课程的一项大作业,作为门外汉,在网上查找资料学习和复现时踩了一些坑,在完成作业后分享一下,希望后面的小白同学少走弯路. 1.问题描述 在计算机视觉/机器视觉领域,图像分割的应用十分普遍 ...
- [Python从零到壹] 五十八.图像增强及运算篇之图像锐化Sobel、Laplacian算子实现边缘检测
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- Sobel算子的边缘检测实现
1. Sobel算子的边缘检测实现 1.1. 边缘检测概念 所谓边缘是指其周围像素灰度急剧变化的那些象素的集合,它是图像最基本的特征.边缘存在于目标.背景和区域之间,所以,它是图像分割所依赖的最重要的 ...
- matlab实现sobel边缘检测图像,基于Sobel算子图像边缘检测的MATLAB实现
<基于Sobel算子图像边缘检测的MATLAB实现>由会员分享,可在线阅读,更多相关<基于Sobel算子图像边缘检测的MATLAB实现(3页珍藏版)>请在人人文库网上搜索. 1 ...
- 在CIELab颜色空间下使用八方向Sobel算子实现边缘检测
参考河北师范大学硕士学位论文--基于八方向Sobel算子的边缘检测算法研究. 由于自己实现滤波器运算,计算速度很慢,以后有能力再进行改进. 算子定义如下: 算法思路: 1.将RGB图像转化为CIELa ...
- C++ Canny算子进行边缘检测
C++实现Canny算子 进行边缘检测 文章目录 C++实现Canny算子 进行边缘检测 前言 一.Canny算子原理 二.C++实现Canny算子 1.步骤 2.C++代码如下 三.Canny算子运 ...
- Opencv python基础入门(4)---sobel算子及边缘检测
本文主要介绍sobel算子及边缘检测: 代码如下: #sobel,ddepth如果设置为-1的话,水平处理只能取出左边界,右边界为负值丢失了,所以需要先用64F扩展然后用convertScaleAbs ...
- [Python从零到壹] 五十七.图像增强及运算篇之图像锐化Roberts、Prewitt算子实现边缘检测
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
最新文章
- 使用 collections 来创建类似元组对象
- linear-gradient 百分比以及斜角的使用
- 如何使用PHP自动备份数据库
- 项目管理工具篇(一、Maven)
- 交叉验证技术(part1)--概述
- halcon学习笔记——(4)HDevelop language(结构语句)
- 博图os更新_博途TIA安装与更新
- builtins.TypeError: sequence item 0: expected a bytes-like object, str found
- mipi的dsi全称_MIPI扫盲——DSI介绍(二)
- 笔记本电脑处理器_华硕推出首款第11代英特尔处理器VivoBook,ZenBook笔记本电脑...
- 找出数组中两数之和为指定值的所有整数对
- python应用系列教程——python使用socket创建udp服务器端和客户端
- python进程池和线程池_python自带的进程池及线程池
- 学习如何在matlab用带通滤波器进行滤波
- UCI数据集介绍(论文常用数据集)
- php生成手写字,钢笔手写体生成工具(PHP)V1.0[原创]
- java 水晶报表_水晶报表-crystal report
- 物联网 DFrobot 掌控版 人工智能测温实验
- 生日快乐,我想念你们
- VUE+ElementUI的表单el-from表单验证二选一必填项,并且满足条件后会清除表单验证提示。