OpenCV学习笔记2-读取图片

来源:互联网 发布:windows 打开dos 编辑:程序博客网 时间:2024/06/05 00:24

OPENCV笔记都是记录MFC下做图像处理的项目时,遇到的问题,留此博客以备记录。


本文主要是需要打开一个对话框,手动选取图片,显示在MFC的picture control上。关于在程序中使用绝对路径读取图片的代码,这里直接给出,不做过多的说明了。


OpenCV使用绝对路径读取图片

void CMyDlg::OnBnClickedBtnloadimg()  
{  
    // TODO:  在此添加控件通知处理程序代码  
    IplImage *SrcImg;  
  
    SrcImg = cvLoadImage("c:\\users\\administrator\\desktop\\1.jpg");//使用绝对路径读取图片  
    //SrcImg = cvLoadImage(".\\1.jpg"); //表示从当前文件夹下读取  
    if (!SrcImg->imageData)  
    {  
        AfxMessageBox("cvLoadImage() err");//使用多字节字符集  
        //AfxMessageBox(_T("cvLoadImage() err")); //使用Unicode字符集  
    }  
    if (SrcImg->nChannels != 1)//如果不是灰度图,转换成灰度图  
    {  
        IplImage *GrayImg = cvCreateImage(cvGetSize(SrcImg), IPL_DEPTH_8U, 1);  
        cvCvtColor(SrcImg, GrayImg, CV_BGR2GRAY);  
    }  
    else  
    {  
        cvReleaseImage(&GrayImg);  
        GrayImg = SrcImg;  
    }  
    /* 
    picture control显示图片,picture control的ID为IDC_ShowSrcImg 
    */  
    //获取IDC_STATIC控件的设备环境,以便对其进行图像操作  
    CDC* pDCSrc = GetDlgItem(IDC_ShowSrcImg)->GetDC();//获得显示空间的DC,MFC类一般都是以C开头  
    HDC  hDCSrc = pDCSrc->GetSafeHdc();//得到hDC句柄进行绘图操作  
    CvvImage cimgsrc;  
    cimgsrc.CopyOf(GrayImg);  
    //将图像显示到IDC_ShowImgSrc控件上  
    CRect rectsrc;  
    GetDlgItem(IDC_ShowSrcImg)->GetClientRect(&rectsrc);  
    cimgsrc.DrawToHDC(hDCSrc, &rectsrc);  
    // 释放  
    ReleaseDC(pDCSrc);  
}  



选择图片进行显示

void CMyDlg::OnBnClickedBtnopenimg()  
{  
    // TODO:  在此添加控件通知处理程序代码  
    IplImage* SrcImg = NULL;  
    CFileDialog dlg(  
        TRUE, _T("*.bmp;*.jpg;*.tif"), NULL,  
        OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY,  
        "image files All Files (*.*) |*.*||", NULL  
        );// 选项图片的约定;    
    dlg.m_ofn.lpstrTitle = _T("打开图片");// 打开文件对话框的标题名;(*.bmp; *.jpg) |*.bmp; *.jpg |    
    if (dlg.DoModal() == IDOK)// 判断是否获得图片;    
    {  
  
        if (dlg.GetFileExt() != "bmp" && dlg.GetFileExt() != "jpg"&&dlg.GetFileExt() != "tif")  
        {  
            AfxMessageBox(_T("请选择正确的图片格式!"), MB_OK);  
            return;  
        }  
  
        CString mPath = dlg.GetPathName();// 获取图片路径;    
  
        SrcImg = cvLoadImage(mPath);//读取图片、缓存到一个局部变量ipl中;    
        if (!SrcImg)// 判断是否成功载入图片;    
            return;  
    }  
  
    /* 
    picture control显示图片,picture control的ID为IDC_ShowSrcImg 
    */  
    //获取IDC_STATIC控件的设备环境,以便对其进行图像操作  
    CDC* pDCSrc = GetDlgItem(IDC_ShowSrcImg)->GetDC();//获得显示空间的DC,MFC类一般都是以C开头  
    HDC  hDCSrc = pDCSrc->GetSafeHdc();//得到hDC句柄进行绘图操作  
    CvvImage cimgsrc;  
    cimgsrc.CopyOf(SrcImg);  
    //将图像显示到IDC_ShowImgSrc控件上  
    CRect rectsrc;  
    GetDlgItem(IDC_ShowSrcImg)->GetClientRect(&rectsrc);  
    cimgsrc.DrawToHDC(hDCSrc, &rectsrc);  
    // 释放  
    ReleaseDC(pDCSrc);  
}  


原创粉丝点击