新建一单文档滚动视图AppExe。源文件链接
doc类添加变量
public:
int ReadImage(LPCTSTR lpszPathName);
int imageWidth,imageHeight; //滚动视图大小
BITMAPINFO * lpbmi; //bmp显示缓存,必需
IplImage* m_pImage; //图像指针
变量初始化
CImageProcessDoc::CImageProcessDoc()
{
// TODO: add one-time construction code here
m_pImage=NULL;
lpbmi=NULL;
imageWidth=imageHeight=100; //初始滚动视图大小
}
读取图像函数,不能直接按下面代码定义ReadImage(IplImage*image,LPCTSTR lpszPathName,BITMAPINFO* lpbmi),因为局部函数产生的内存不能传递给image和lpbmi,最后image和lpbmi都是NULL,要想使用ReadImage(IplImage*image,LPCTSTR lpszPathName,BITMAPINFO* lpbmi),必需在函数外分配image和lpbmi内存大小,谨记
不要在函数里使用new函数分配内存返回给参数,分配的内存不知道会跑到哪里!int CImageProcessDoc::ReadImage(LPCTSTR lpszPathName)
{
m_pImage=cvLoadImage(lpszPathName);
lpbmi=(LPBITMAPINFO)new char[sizeof(BITMAPINFO)+4*(1<<8)];
lpbmi->bmiHeader.biBitCount=m_pImage->depth*m_pImage->nChannels;
lpbmi->bmiHeader.biClrUsed=0;
lpbmi->bmiHeader.biHeight=m_pImage->height;
lpbmi->bmiHeader.biWidth=m_pImage->width;
lpbmi->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
lpbmi->bmiHeader.biSizeImage=m_pImage->width*m_pImage->height*m_pImage->nChannels;
lpbmi->bmiHeader.biClrImportant=0;
lpbmi->bmiHeader.biCompression=0;
lpbmi->bmiHeader.biPlanes=1;//m_pImage->nChannels;
for(int i=0;i<(1<<8);i++)
{
RGBQUAD &o=lpbmi->bmiColors[i];
o.rgbBlue=i;
o.rgbGreen=i;
o.rgbRed=i;
o.rgbReserved=0;
}
return TRUE;
}
打开文件操作,因为每次打开文件都会新建一视图,并调用视图的OnInitialUpdate函数,所以并不需要添加UpdateAllViews函数(这里是单文档SDI)
BOOL CImageProcessDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
if(ReadImage(lpszPathName))
{
imageHeight=m_pImage->height;
imageWidth=m_pImage->width;
// UpdateAllViews(NULL,0,0);
}
return TRUE;
}
视图初始化,设置滚动视图大小与图像大小一致,每次打开新文档自动建立视图,调用此函数
void CImageProcessView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CImageProcessDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = pDoc->imageWidth;
sizeTotal.cy = pDoc->imageHeight;
SetScrollSizes(MM_TEXT, sizeTotal);
}
显示图像
void CImageProcessView::OnDraw(CDC* pDC)
{
CImageProcessDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if (pDoc->m_pImage!=NULL)//图像非空
{
StretchDIBits(pDC->m_hDC,0,0,pDoc->m_pImage->width,pDoc->m_pImage->height,
0,pDoc->m_pImage->height,pDoc->m_pImage->width,-pDoc->m_pImage->height,
pDoc->m_pImage->imageData,pDoc->lpbmi,
DIB_RGB_COLORS,SRCCOPY);
}
}
分享到:
相关推荐
opencv打开图片显示坐标 画矩形框框
OpenCV打开并显示图片,同时还能判断图片是否为空,值得新手学习的Code
opencv载入并显示一张图片
在VS2017环境下,通过OpenCV和大恒提供的SDK按照IP、MAC地址或序列号打开指定型号的相机,并通过回调和直接采集两种方式获取图像,并将获取的图像保存成OpenCV的Mat格式。对于同一台电脑上连接多台相机的情况,可以...
在opencv中可以直接弹出小窗口显示图片,这个很突兀,如果显示图片多的化就很麻烦,本代码实现了在Qt界面中将opencv的图片直接显示在lable控件上。
OpenCV读取和显示图片,cvLoadImage读取图像和StretchDlBits显示图像,每次打开图像自动调整滚动视图大小,使视图能包含完整图像。
VC2008与OPENCV打开目录显示图片,对初学MFC的少年有帮助
很简单的小代码,主要是用于学习熟悉MFC和openCV。 我会说我在努力攒积分想要学习用openCV打开YUV的方法么
Opencv视频教程之显示图像.ppt,适合初学者去了解OPENCV。
OpenCvSharp与Picturebox实现图片打开、读取、灰度转换与保存
利用OpenCVSharp 打开并显示图像 var openFileDlg = new OpenFileDialog(); if (openFileDlg.ShowDialog() != DialogResult.OK) return; using var img = Cv2.ImRead(openFileDlg.FileName, ImreadModes.Color)...
在MFC中使用OpenCV 实现打开图片显示、保存图片功能 注意 本程序为VC6.0下 基于OpenCV1.0的程序 使用前先确保Opencv1.0在VC6.0的安装和配置正确 添加的代码在View类和Doc类里
这是Python调用OpenCV打开一张本地图片进行显示源码。 演示python如何调用OpenCV打开本地图片进行显示。 方便接下来对图像进行处理。
使用VC++2008与Opencv2.4.3同时添加了Cvvimage,来实现对各种不同类型图像的打开,打开之后可以选择百分比显示,当图片超出窗口大小时,可以使用滚轴来选择观察区域。
在MFC中使用两种方法显示opencv打开的图像。一种是新建一个dialog显示,一种是调用opencv库函数的显示。
MFC创建对话框,用OpenCV库调,读取图像或者打开摄像头或者打开视频,保存视频帧,为图像
采用MFC,OpenCV Mat读取任意路径的图像并在界面上显示图像。
vs2017创建的工程,直接打开工程即可编译运行;通过opencv imread读入图片后,显示在picture控件上;鼠标左键摁住实现图片拖动;鼠标滚轮实现图片放大缩小;
打开摄像头并捕获照片 ;播放本地视频、录制视频; 开始帧,结束桢,获取帧率,承载每一帧的图像;显示每一帧的窗口