二 图像处理opencv mfc学习

MFC大致上看过一点,也就是会一个事件处理怎么写吧,其他的基本上都不会,纯粹的菜鸟,这不想书也看了,应该也可以试试一个简单的处理。好,下面就开始这个里面的第一块,打开图像。

对于打开图像,这个还真是个难题,不然直接用MFC打开图像方法还是很多的,不过这次结合opencv2.3来的时候却不是那么好办了,看了一些写的,贴上来给大家看看

    CDC* pDC = GetDlgItem( ID ) ->GetDC();        // 获得显示控件的 DC
    HDC hDC = pDC ->GetSafeHdc();                // 获取 HDC(设备句柄) 来进行绘图操作
    CRect rect;
    GetDlgItem(ID) ->GetClientRect( &rect );
    int rw = rect.right - rect.left;            // 求出图片控件的宽和高
    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( pDC );

里面用到的了CvvImage,这个里面直接有CopyOf这个方法,而这个类在opencv2.3中已经不在了,所以有的人就提出了这么一个方法把cvvimage.h和cvvimage.cpp直接放到工程里编译,这个是可以的,网上有成功的例子,而对于opencv2.3中对于c++不是C的读取图像用

Mat img = imread(imagename);这样做可以尽量避免使用指针这个危险的东西,而且用这个也不用去release资源,而对于不是IplImage的类型资料更少,而对于Mat类型也不会在转到IplImage类型来处理,然后查找资料,由于OpenCV里没有函数把Mat直接显示到View里,处理的方法有两种,一种是转CImage,这个可以参考http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=15224&p=52713&hilit=mfc+2.3&sid=a14b9893a7d6071cd0fe6ab943066352#p52713
另外一种是通过StretchDIBits来绘制,这个大家可以参考
http://www.dzqy.tk/2011/11/mfc-use-opencv.html
目前正在学习MFC和图像处理,大家一起交流。
 
posted @ 2012-06-19 00:44  越影&逐日而行  阅读(481)  评论(0编辑  收藏  举报