OpenCV + MFC 鼠标键盘控制截取图像

来源:互联网 发布:淘宝助理5.6.9 编辑:程序博客网 时间:2024/05/02 01:03

前面用Matlab完成过这样的工作,但是win7+64位系统上写的到了XP上用不了,也就懒得再继续了。直接用OpenCV和MFC写了,很简陋的界面和功能,倒也很快就完成了。还是那个想法,记录下留个纪念,能对别人有所帮助就更好了。

因为有图像的操作,OpenCV还是很不错滴。在写的过程中,发现OpenCV对于鼠标键盘响应的操作也是灰常的便利呀。看来我真是孤陋寡闻呀… ^O^|||

我的环境是win7 64位 + VS2010 + OpenCV 2.4.10

列一下几个参考的网页:(鼠标、键盘控制,文件路径选择)
鼠标绘制
键盘控制
文件路径选择

还是先来看一下一如既往“简丑”(简单丑陋)的界面吧~

界面

文件路径选择,这个是直接从网上找的文件夹选择对话框 SelectFolderDlg.h,可以直接选择文件夹获取路径:

CString strFolderPath = CSelectFolderDlg::Show();

PS.这个头文件的介绍可以参考上面的链接,原博主写的很详细,感谢分享。

开始截图,这个简单,就直接上代码了。

/************************************************************************//* == 开始剪切图像,根据选择的读取文件夹,逐个读取图像,截取并且存储 ==  *//************************************************************************/void CMy0817_CutImgMFCDlg::OnBnClickedBtnbegintocut(){    DispImgs(FileCount);    int SaveFlag = 1;    char DispSaveName[30];    CString StrSaveName;    while(1)    {        int key = waitKey(10);        switch(key)        {        case 'a': //== 前一幅图像 ==//            FileCount --;            if (FileCount < 0)            {                MessageBox(_T("第一幅图像!"),_T("提示"),MB_OK | MB_ICONWARNING);                FileCount ++;            }            DispImgs(FileCount);            SaveFlag = 1;            SetDlgItemInt(IDC_EDITIMGNO,FileCount+1);            UpdateData(FALSE);            break;        case 'd': //== 下一幅图像 ==//            FileCount ++;            if (FileCount >= FileNum)            {                MessageBox(_T("最后一幅图像!"),_T("提示"),MB_OK | MB_ICONWARNING);                FileCount --;            }            DispImgs(FileCount);            SaveFlag = 1;               SetDlgItemInt(IDC_EDITIMGNO,FileCount+1);            UpdateData(FALSE);            break;        case 's': //== 存储图像 ==//            SaveCutImgs(FileCount,SaveFlag);            sprintf_s(DispSaveName,sizeof(DispSaveName),"Save %d_%d.jpg",FileCount,SaveFlag);            StrSaveName = DispSaveName;            m_EditSaveFlag.SetWindowTextW(StrSaveName);            SaveFlag ++;            break;        case 27:            destroyAllWindows();            break;        default:            break;        }        UpdateData(FALSE);    }   }

键盘按键:
- a 前一副图像
- d 后一副图像
- s 存储截图
- ESC 退出,销毁所有窗口

Q? 这里有个问题还没有弄明白,当OpenCV显示的窗口都关闭后,MFC的界面就会卡死,为什么呢?

其他的就没什么可以介绍的了,这个功能太简单了。后续待更新吧。

最后,还是附上源工程以及可执行文件。

源工程

可执行文件EXE

2015年8月26日 于西直门

0 0
原创粉丝点击