|
本帖最后由 wawa 于 2016-6-3 20:01 编辑
cv::Mat显示是opencv编程时不可或缺的一步操作,opencv内就自带了 imshow()这样一个方便的显示函数。但您是否曾经对额外弹出一个窗口感觉不爽,是否在需要查看图片细节的时候,又要重新手动调整mat尺寸再imshow()而感到厌烦。。。
下面分享一个应用于MFC Picture控件的类,可以实现Mat的加载显示、缩放(滚轮滑动)、拖动(滚轮拖动),应该能给刚开始使用MFC写opencv界面的提供一些便利
本类的使用方法:
1.建立一个picture控件,控件属性中的Notify改成true
2.通过mfc的classwizard来将该picture控件关联并建立一个CStatic类的对象(例m_showing)
3.在控件所在对话框的头文件(例:testDlg.h)中找到刚刚建立的对象(m_showing),并将其类型改为本类CV_picture
4.在控件所在对话框的头文件(testDlg.h)中包含本头文件
5.在控件所在对话框的CCP中(testDlg.ccp)找到OnInitDialog,并在其下的额外初始化代码中加入:
m_showImg.OnInit();
注意:建立的工程使用的字符集必须为“多字节字符集”否则字符类型转换中会出错
完成以上配置后,如要显示指定的图片,只需调用ShowImage(cv::Mat &img,int method=0)即可将图片显示在控件上
函数说明:
//自动调节输入img大小以适应对应图片控件,并将其完整显示出来(本操作包含了cvLoadImage(cv::Mat &img)中的所有操作)
//method缩放的方式:0表示保持图片原比例去适应图片框,1表示拉伸图片去适应图片框
void ShowImage(cv::Mat &img,int method=0);
//显示src通过鼠标调整后当前所显示的roi区域内的图像,主要用于刷新画面或高速显示同样规格的图片,不带任何初始化,src的图片规格必须上一次加载的mat完全一致,否则请调用一次ShowImage或cvLoadImage
void ShowImage_roi(cv::Mat &src,int method=0);
//每次因窗口绘图刷新图像时的显示图像的缩放方式:0表示保持图片原比例去适应图片框,1表示拉伸图片去适应图片框
m_iDrawingMethod
关于其他使用细节或如需扩展可参考源代码
|
|