
opencv DrawToHDC图像处理问题?
UpdateData(true);
// TODO: Add your control notification handler code here
CFileDialog fd(TRUE,_T("bmp"),_T(".bmp"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"位图文件(*.bmp)|*.bmp||",this);
CString path;
if(fd.DoModal()==IDOK)
{
path=fd.GetPathName();
}
else return false;
//if(pImgEmbed.nSize!=0)cvReleaseImage(&pImgEmbed);
IplImage * pImgEmbed = cvLoadImage((const char *)(LPCTSTR)path, CV_LOAD_IMAGE_UNCHANGED);
CDC* pDC = GetDlgItem(IDC_STATIC1) ->GetDC(); // 获得显示控件的 DC
HDC hDC = pDC ->GetSafeHdc(); // 获取 HDC(设备句柄) 来进行绘图操作
CRect rect;//,rect2; //
//((CStatic*)GetDlgItem(IDC_STATIC1))->GetWindowRect(&rect2);
GetDlgItem(IDC_STATIC1) ->GetClientRect( &rect );
int rw = rect.right - rect.left; // 求出图片控件的宽和高
int rh = rect.bottom - rect.top;
int iw = pImgEmbed->width; // 读取图片的宽和高
int ih = pImgEmbed->height;
int tx = (int)(rw - iw)/2; // 使图片的显示位置正好在控件的正中
int ty = (int)(rh - ih)/2;
SetRect( rect, tx, ty, tx+iw, ty+ih );

//if(TraceFlag==FALSE) DrawFrame(pImgEmbed,TraceLocation);
CvvImage cimg;
cimg.CopyOf(pImgEmbed); // 复制图片
cimg.DrawToHDC( hDC, &rect ); // 将图片绘制到显示控件的指定区域内
cvWaitKey(50);
ReleaseDC( pDC );
//cvShowImage("水印图像", pImgEmbed);
GetDlgItem(IDC_STATIC1)->ShowWindow(SW_SHOW);
UpdateData(FALSE);
return TRUE;
我用以上程序显示第一幅图片很正常,但是载入以后的图片才发现前面的图片还是存在的,请问高手们,怎么判断是否已显示有图片,并删除旧图片只显示新图片
OpenCV与MFC
OpenCV是计算机视觉自由软件的宝库。但是,由于历史的原因它的软件主要采用类似DOS操作系统的命令行方式,使用十分不便,这也影响了它的推广。如果能将它应用到VC++文档结构中就好了。OpenCV程序在MFC中实现的方法通常是采用CvvImage类,这个类的成员函数DrawToHDC可将位图整体经缩放后显示到视图窗口中,解决了位图的显示问题,也就解决了OpenCV在MFC中的使用问题。但是,也有两个致命的弱点,一是显示方式不合图像处理使用习惯,二是位图必须采用CvvImage类。显示方面,虽然已经能够察看图像,但当位图与窗口的长宽比不一致时会造成图像失真,这是浏览器的显示习惯,并不适用于图像处理应用。图像采集与处理的使用习惯是显示比例1:1,图像未经缩放,显示画面可按窗口大小进行裁剪并可使用滚动条选择显示部位。数据结构方面,采用CvvImage类以后程序中所有位图必须修改成这个类,这对于利用大量OpenCV现成软件来说是十分不方便的。显然,在VC++文档结构中使用OpenCV,其关键还是在于OpenCV位图在MFC中的显示。因此,有必要先比较一下两者的位图结构,然后寻找新的解决方法。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-30453-1.html
什么船撞得过他
家里利息为0