ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:20.30KB ,
资源ID:13948937      下载积分:5 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-13948937.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(图像管理方案计划opencv代码.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

图像管理方案计划opencv代码.docx

1、图像管理方案计划opencv代码#include stdafx.h#include mymfc.h#include mymfcDlg.h#include afxdialogex.h#include #ifdef _DEBUG#define new DEBUG_NEW#endif/ 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogExpublic: CAboutDlg();/ 对话框数据 enum IDD = IDD_ABOUTBOX ; protected: virtual void DoDataExchange(CDat

2、aExchange* pDX); / DDX/DDV 支持/ 实现protected: DECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialogEx(CAboutDlg:IDD)void CAboutDlg:DoDataExchange(CDataExchange* pDX) CDialogEx:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)END_MESSAGE_MAP()/ CmymfcDlg 对话框CmymfcDlg:CmymfcDlg(CWnd* pParent /

3、*=NULL*/) : CDialogEx(CmymfcDlg:IDD, pParent) , TheImage(NULL) , rePath(_T() m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CmymfcDlg:DoDataExchange(CDataExchange* pDX) CDialogEx:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CmymfcDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON

4、_BN_CLICKED(IDC_ReadImg, &CmymfcDlg:OnBnClickedReadimg) ON_BN_CLICKED(IDC_EdgeDetect, &CmymfcDlg:OnBnClickedEdgedetect) ON_BN_CLICKED(IDC_Refresh, &CmymfcDlg:OnBnClickedRefresh) ON_BN_CLICKED(IDC_GrayProcess, &CmymfcDlg:OnBnClickedGrayprocess) ON_BN_CLICKED(IDC_Sobel, &CmymfcDlg:OnBnClickedSobel) ON

5、_BN_CLICKED(IDC_Laplace, &CmymfcDlg:OnBnClickedLaplace) ON_BN_CLICKED(IDC_FFT2, &CmymfcDlg:OnBnClickedFft2) ON_BN_CLICKED(IDC_CImage, &CmymfcDlg:OnBnClickedCimage) ON_BN_CLICKED(IDC_Mirror, &CmymfcDlg:OnBnClickedMirror) ON_BN_CLICKED(IDC_CColor, &CmymfcDlg:OnBnClickedCcolor) ON_BN_CLICKED(IDC_Median

6、Blur, &CmymfcDlg:OnBnClickedMedianblur) ON_BN_CLICKED(IDC_Gaussian, &CmymfcDlg:OnBnClickedGaussian) ON_BN_CLICKED(IDC_BothSide, &CmymfcDlg:OnBnClickedBothside) ON_BN_CLICKED(IDC_Equally, &CmymfcDlg:OnBnClickedEqually) ON_BN_CLICKED(IDC_Corrosion, &CmymfcDlg:OnBnClickedCorrosion) ON_BN_CLICKED(IDC_Di

7、late, &CmymfcDlg:OnBnClickedDilate)END_MESSAGE_MAP()/ CmymfcDlg 消息处理程序BOOL CmymfcDlg:OnInitDialog() CDialogEx:OnInitDialog(); / 将“关于.”菜单项添加到系统菜单中。 CvSize ImgSize; ImgSize.height = IMAGE_HEIGHT; ImgSize.width = IMAGE_WIDTH; TheImage = cvCreateImage( ImgSize, IPL_DEPTH_8U, IMAGE_CHANNELS ); / IDM_ABOU

8、TBOX 必须在系统命令范围内。 ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); / 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 / 执行此操作 SetIcon(m_hIcon, TRUE); / 设置大图标 SetIcon(m_hIcon, FALSE); / 设置小图标 / TODO: 在此添加额外的初始化代码 ret

9、urn TRUE; / 除非将焦点设置到控件,否则返回 TRUEvoid CmymfcDlg:OnSysCommand(UINT nID, LPARAM lParam) if (nID & 0xFFF0) = IDM_ABOUTBOX) CAboutDlg dlgAbout; dlgAbout.DoModal(); else CDialogEx:OnSysCommand(nID, lParam); / 如果向对话框添加最小化按钮,则需要下面的代码/ 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,/ 这将由框架自动完成。void CmymfcDlg:OnPaint() if (IsI

10、conic() CPaintDC dc(this); / 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast(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.Hei

11、ght() - cyIcon + 1) / 2; / 绘制图标 dc.DrawIcon(x, y, m_hIcon); else CDialogEx:OnPaint(); CDialog:OnPaint(); / 重绘对话框 CDialog:UpdateWindow(); / 更新windows窗口,如果无这步调用,图片显示还会出现问题 /ShowImage( TheImage, IDC_ShowImg ); / 重绘图片函数 /当用户拖动最小化窗口时系统调用此函数取得光标/显示。HCURSOR CmymfcDlg:OnQueryDragIcon() return static_cast(m_

12、hIcon);void CmymfcDlg:OnBnClickedReadimg() /读取图片操作 / TODO: 在此添加控件通知处理程序代码 / 这里用CFileDialog来选择图片 CFileDialog dlg( TRUE, _T(*.bmp), NULL, OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY, _T(All Files (*.*) |*.*|image files (*.bmp; *.jpg)|*.bmp; *.jpg |), NULL ); / 打开文件对话框的标题名 dlg.m_ofn.lpstrT

13、itle = _T(Open Image); / 判断是否获得图片 if( dlg.DoModal() != IDOK ) return; / 获取图片路径 CString mPath = dlg.GetPathName(); rePath = mPath; / 读取图片 IplImage* ipl = cvLoadImage( mPath, 1 ); / 判断是否成功读取图片 if( !ipl ) return; if( TheImage ) cvZero( TheImage ); ResizeImage( ipl ); ShowImage( TheImage,IDC_ShowImg); c

14、vReleaseImage( &ipl );void CmymfcDlg:ShowImage(IplImage* img, UINT ID) / ID 是Picture Control控件的ID号 / 获得显示控件的 DC CDC* pDC = GetDlgItem( ID ) -GetDC(); / 获取 HDC(设备句柄) 来进行绘图操作 HDC hDC = pDC -GetSafeHdc(); CRect rect; GetDlgItem(ID) -GetClientRect( &rect ); / 求出图片控件的宽和高 int rw = rect.right - rect.left;

15、int rh = rect.bottom - rect.top; / 读取图片的宽和高 int iw = img-width; int ih = img-height; / 使图片的显示位置正好在控件的正中 int tx = (int)(rw - iw)/2; int ty = (int)(rh - ih)/2; SetRect( rect, tx, ty, tx+iw, ty+ih ); / 复制图片 CvvImage cimg; cimg.CopyOf( img ); / 将图片绘制到显示控件的指定区域内 cimg.DrawToHDC( hDC, &rect ); ReleaseDC( p

16、DC );void CmymfcDlg:ResizeImage(IplImage* img) / 读取图片的宽和高 int w = img-width; int h = img-height; / 找出宽和高中的较大值者 int max = (w h)? w: h; / 计算将图片缩放到TheImage区域所需的比例 float scale = (float) ( (float) max / 256.0f ); / 缩放后图片的宽和高 int nw = (int)( w/scale ); int nh = (int)( h/scale ); / 为了将缩放后的图片存入 TheImage 的正中

17、部位,需计算图片在 TheImage 左上角的期望坐标值 int tlx = (nw nh)? 0: (int)(256-nw)/2; int tly = (nw nh)? (int)(256-nh)/2: 0; / 设置 TheImage 的 ROI 区域,用来存入图片 img cvSetImageROI( TheImage, cvRect( tlx, tly, nw, nh) ); / 对图片 img 进行缩放,并存入到 TheImage 中 cvResize( img, TheImage ); / 重置 TheImage 的 ROI 准备读入下一幅图片 cvResetImageROI(

18、TheImage );void CmymfcDlg:OnBnClickedEdgedetect() /Canny算法的边缘检测 / TODO: 在此添加控件通知处理程序代码 IplImage *gray = 0, *edge = 0; gray = cvCreateImage( cvSize(IMAGE_WIDTH, IMAGE_HEIGHT), IPL_DEPTH_8U, 1 ); edge = cvCreateImage( cvSize(IMAGE_WIDTH, IMAGE_HEIGHT), IPL_DEPTH_8U, 1 ); cvCvtColor( TheImage, gray, CV

19、_BGR2GRAY ); cvCanny( gray, edge, 30, 100, 3 ); ShowImage( edge, IDC_ShowImg ); / 调用显示图片函数 cvReleaseImage( &gray ); cvReleaseImage( &edge );void CmymfcDlg:OnBnClickedRefresh() /恢复图片 / TODO: 在此添加控件通知处理程序代码 /将读入的图片路径传给mPath CString mPath = rePath; / 读取图片、缓存到一个局部变量 ipl 中 IplImage* ipl = cvLoadImage( mP

20、ath, 1 ); / 判断是否成功读取图片 if( !ipl ) return; / 对上一幅显示的图片数据清零 if( TheImage ) cvZero( TheImage ); / 对读入的图片进行缩放,使其宽或高最大值者刚好等于 256,再复制到 TheImage 中 ResizeImage( ipl ); / 调用显示图片函数 ShowImage( TheImage,IDC_ShowImg);void CmymfcDlg:OnBnClickedGrayprocess() /灰度图像的转化 / TODO: 在此添加控件通知处理程序代码 IplImage *gray = 0; gray

21、 = cvCreateImage( cvSize(IMAGE_WIDTH, IMAGE_HEIGHT), IPL_DEPTH_8U, 1 ); cvCvtColor( TheImage, gray, CV_RGB2GRAY ); ShowImage( gray, IDC_ShowImg ); /释放图片的内存空间 cvReleaseImage( &gray );void CmymfcDlg:OnBnClickedSobel() /用cvSobel函数的边缘检测 / TODO: 在此添加控件通知处理程序代码 IplImage *gray = 0, *edge = 0; gray = cvCrea

22、teImage( cvSize(IMAGE_WIDTH, IMAGE_HEIGHT), IPL_DEPTH_8U, 1 ); edge = cvCreateImage( cvSize(IMAGE_WIDTH, IMAGE_HEIGHT), IPL_DEPTH_8U, 1 ); cvCvtColor( TheImage, gray, CV_BGR2GRAY ); cvSobel( gray, edge, 1, 0, 3 ); ShowImage( edge, IDC_ShowImg ); / 调用显示图片函数 cvReleaseImage( &gray ); cvReleaseImage( &e

23、dge );void CmymfcDlg:OnBnClickedLaplace() /用cvLaplace函数实现图像的拉普拉斯变换 / TODO: 在此添加控件通知处理程序代码 IplImage *gray = 0, *edge = 0; gray = cvCreateImage( cvSize(IMAGE_WIDTH, IMAGE_HEIGHT), IPL_DEPTH_8U, 1 ); edge = cvCreateImage( cvSize(IMAGE_WIDTH, IMAGE_HEIGHT), IPL_DEPTH_8U, 1 ); cvCvtColor( TheImage, gray,

24、 CV_BGR2GRAY ); cvLaplace( gray, edge, 3 ); ShowImage( edge, IDC_ShowImg ); / 调用显示图片函数 cvReleaseImage( &gray ); cvReleaseImage( &edge );void CmymfcDlg:fft2(IplImage* src, IplImage* des) /傅里叶正变换方法 /实部、虚部 IplImage *image_Re = 0, *image_Im = 0, *Fourier = 0; / int i, j; image_Re = cvCreateImage(cvGetSi

25、ze(src), IPL_DEPTH_64F, 1); /实部 /Imaginary part image_Im = cvCreateImage(cvGetSize(src), IPL_DEPTH_64F, 1); /虚部 /2 channels (image_Re, image_Im) Fourier = cvCreateImage(cvGetSize(src), IPL_DEPTH_64F, 2); / Real part conversion from u8 to 64f (double) cvConvertScale(src, image_Re, 1, 0); / Imaginary

26、part (zeros) cvZero(image_Im); / Join real and imaginary parts and stock them in Fourier image cvMerge(image_Re, image_Im, 0, 0, Fourier); / Application of the forward Fourier transform cvDFT(Fourier, des, CV_DXT_FORWARD); cvReleaseImage(&image_Re); cvReleaseImage(&image_Im); cvReleaseImage(&Fourier

27、);void CmymfcDlg:OnBnClickedFft2() / TODO: 在此添加控件通知处理程序代码 IplImage *src; /源图像 IplImage *Fourier; /傅里叶系数 IplImage *dst ; IplImage *ImageRe; IplImage *ImageIm; IplImage *Image; IplImage *ImageDst; double m,M; double scale; double shift; src = cvLoadImage(rePath,0); /加载源图像,第二个参数表示将输入的图片转为单信道 Fourier =

28、cvCreateImage(cvGetSize(src),IPL_DEPTH_64F,2); dst = cvCreateImage(cvGetSize(src),IPL_DEPTH_64F,2); ImageRe = cvCreateImage(cvGetSize(src),IPL_DEPTH_64F,1); ImageIm = cvCreateImage(cvGetSize(src),IPL_DEPTH_64F,1); Image = cvCreateImage(cvGetSize(src),src-depth,src-nChannels); ImageDst = cvCreateImag

29、e(cvGetSize(src),src-depth,src-nChannels); fft2(src,Fourier); /傅里叶变换 fft2shift(Fourier, Image); /中心化 /cvDFT(Fourier,dst,CV_DXT_INV_SCALE);/实现傅里叶逆变换,并对结果进行缩放 cvSplit(dst,ImageRe,ImageIm,0,0); cvPow(ImageRe,ImageRe,2); cvPow(ImageIm,ImageIm,2); cvAdd(ImageRe,ImageIm,ImageRe,NULL); cvPow(ImageRe,ImageRe,0.5); cvMinMaxLoc

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2