欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

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

    • 资源ID:13948937       资源大小:20.30KB        全文页数:23页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    图像管理方案计划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


    注意事项

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

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


    收起
    展开