计算机图像处理技术

上传人:kms****20 文档编号:40990538 上传时间:2018-05-27 格式:DOC 页数:16 大小:38.50KB
返回 下载 相关 举报
计算机图像处理技术_第1页
第1页 / 共16页
计算机图像处理技术_第2页
第2页 / 共16页
计算机图像处理技术_第3页
第3页 / 共16页
计算机图像处理技术_第4页
第4页 / 共16页
计算机图像处理技术_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《计算机图像处理技术》由会员分享,可在线阅读,更多相关《计算机图像处理技术(16页珍藏版)》请在金锄头文库上搜索。

1、计算机图像处理技术计算机图像处理技术计算机图像处理技术前言:随着计算机软件、硬件技术的日新月异的发展和普及,人类已经进入一个高速发展的信息化时代,人类大概有 80%的信息来自图像,科学研究、技术应用中图像处理技术越来越成为不可缺少的手段。图像处理所涉及的领域有军事应用、医学诊断、工业监控、物体的自动分检识别系统等等,这些系统无不需要计算机提供实时动态,效果逼真的图像。基于图像采集卡的视频图像处理系统计算机图像处理系统从系统层次上可分为高、中、低档三个层次,目前一般比较普及的是低档次的系统,该系统由 CCD(摄像头) 、图像采集卡、计算机三个部分组成,其结构简单,应用方便,效果也比较不错,得到的

2、图像较清晰。目前网上基于 VC 开发经验的文章不少,可是关于如何在 VC 开发平台上使用图像采集卡的文章确没发现,笔者针对在科研开发中积累的使用图像采集卡经验,介绍如何自己是如何将采集卡集成到图像开发系统中,希望能够给目前正需要利用图像采集卡开发自己的图像处理系统的朋友有所帮助。使用的摄像机采用台湾 BENTECHINDUSTRIAL有限公司生产的 CV-155L 黑白摄像机。该摄像机分辨率为752x582。图象采集卡我们采用北京中科院科技嘉公司开发的基于PCI总线的 CA-MPE1000黑白图象采集卡。使用图像采集卡分三步,首先安装采集卡的驱动程序,并将虚拟驱动文件 VxD.vxd 拷贝到

3、Windows 的 SYSTEM 目录下;这时候就可以进入开发状态了,进入 VC 开发平台,生成新的项目,由于生产厂家为图像采集卡提供了以 mpew32.dll、mpew32.lib 命名的库文件,库中提供了初始硬件、采集图像等函数,为使用这些函数,在新项目上连接该动态库;最后一步就是采集图像并显示处理了,这一步要设置系统调色板,因为采集卡提供的是裸图形式,既纯图像数据,没有图像的规格和调色板信息,这些需要开发者自己规定实现,下面是实现的部分代码:CTestView:CTestView()W32_Init_MPE1000();/初始化采集卡W32_Modify_Contrast(50);/下面

4、的函数是为了对采集卡进行预设置W32_Modify_Brightness(45);/设置亮度W32_Set_HP_Value(945);/设置水平采集点数wCurrent_Frame=1;/当前帧为 1,获取的图像就是从这帧取得的/设置采集信号源,仅对 MPE1000 有效W32_Set_Input_Source;W32_CACardParam(AD_SETHPFREQ,hpGrabFreq);W32_Set_PAL_Range(1250,1024);/设置水平采集范围W32_Set_VGA_Mode(1);wGrabWinX1=0;/采集窗口的左上角的坐标wGrabWinY1=0;first

5、Time=TRUE;bGrabMode=FRAME;bZipMode=ZIPPLE;/lpDib=NULL;/存放获取的图像数据CTestView:CTestView()W32_Close_MPE1000();/关闭采集卡/显示采集的图象,双击鼠标采集停止voidCTestView:OnGraboneframe()/TODO:AddyourcommandhandlercodeherewCurrent_Frame=1;/设置采集目标为内存W32_CACardParam(AD_SETGRABDEST,CA_GRABMEM);/启动采集if(lpDib!=NULL)GlobalUnlock(hglb

6、DIB);GlobalFree(hglbDIB);/分配内存hglbDIB=GlobalAlloc(GHND,(DWORD)wImgWidth*(DWORD)wImgHeight);lpDib=(BYTE*)GlobalLock(hglbDIB);hdc=GetDC()-GetSafeHdc();if(lpDib!=NULL)cxDib=wImgWidth;cyDib=wImgHeight;SetLogicPal(hdc,cxDib,cyDib,8);SetStretchBltMode(hdc,COLORONCOLOR);bGrabMark=TRUE;while(bGrabMark=TRUE)

7、if(msg.message=WM_LBUTTONDBLCLK)bGrabMark=FALSE;W32_ReadXMS2Buf(wCurrent_Frame,lpDib);SetDIBitsToDevice(hdc,0,0,cxDib,cyDib,0,0,0,cyDib,(LPSTR)lpDib,bmi,DIB_RGB_COLORS);/停止采集W32_CAStopCapture();:ReleaseDC(GetSafeHwnd(),hdc);return;/将下面这个函数添加在视图类的 CTestView:OnSize()函数中,就可以对系统的调色板进行设置。voidWINAPIInitLo

8、gicPal(HDChdc,shortwidth,shortheight,WORDbitCount)intj,i;shortcxDib,cyDib;LOGPALETTE*pLogPal;j=256;计算机图像处理技术(2)if(pLogPal=(LOGPALETTE*)malloc(sizeof(LOGPALETTE)+(j*sizeof(PALETTEENTRY)=NULL)return;pLogPal-palVersion=0x300;pLogPal-palNumEntries=j;for(i=0;ipLogPal-palPalEntryi.peRed=i;pLogPal-palPalEn

9、tryi.peGreen=i;pLogPal-palPalEntryi.peBlue=i;pLogPal-palPalEntryi.peFlags=0;hPal=:CreatePalette(pLogPal);deletepLogPal;:SelectPalette(hdc,hPal,0);:RealizePalette(hdc);cxDib=width;cyDib=height;if(bmi=(BITMAPINFO*)malloc(sizeof(BITMAPINFOHEADER)+j*sizeof(RGBQUAD)=NULL)return;/bmi 为全局变量,用于显示图像时用bmi-bmi

10、Header.biSize=40;bmi-bmiHeader.biWidth=cxDib;bmi-bmiHeader.biHeight=cyDib;bmi-bmiHeader.biPlanes=1;bmi-bmiHeader.biBitCount=bitCount;bmi-bmiHeader.biCompression=0;bmi-bmiHeader.biSizeImage=0;bmi-bmiHeader.biXPelsPerMeter=0;bmi-bmiHeader.biYPelsPerMeter=0;bmi-bmiHeader.biClrUsed=0;bmi-bmiHeader.biClr

11、Important=0;for(i=0;ibmi-bmiColorsi.rgbBlue=i;bmi-bmiColorsi.rgbGreen=i;bmi-bmiColorsi.rgbRed=i;bmi-bmiColorsi.rgbReserved=0;视频“画中画“技术“画中画“这个概念类似与彩色电视机“画中画“,就是在一幅大的图像内显示另外一幅内容不同的小的图像,小图像的尺寸大小一般地说为大图像尺寸的 1/4 或 1/9,显示位置在大图像的右上角。这种技术不仅在电视技术中,在可视电话系统也可以发现这种技术的身影,它们都是依靠硬件来实现的,但是如何在 VC 开发平台上用编程语言来将该功能添加到自

12、己开发的视频监控软件,为使用者提供更大的信息量呢?也许读者最容易想到的是首先显示大图像,然后再在一个固定位置画第二幅小图像,这种技术技术如果对于静止图像当然没有问题,但是对于视频流,由于每一秒钟需要画 25 幀,即 25 幅图像,这样一来计算机需要不停的画不停的擦除,会给用户以闪烁的感觉,如何解决这个问题呢?有的参考书上将大小图像分快显示,这种方法要将待显示的图像数据与显示位置的关系对应起来,容易出错不说,而且麻烦,且速度慢,为此,我对该方法进行了改进,得到了满意的效果。实现的代码如下:voidpictureinpicture().CBitmapbitmap,*oldmap;pData1=(B

13、YTE*)newcharbiWidth*biHeight*3;/biWidth 和 biHeight 为视频采集卡获取/的图像尺寸。Read(pData1,bih.biWidth*bih.biHeight*3);/该函数从采集卡中获取数据CClientDCdc(this);m_pBMI1=newBITMAPINFO;/自定义的 BMP 文件信息结构,用于后面的图像显示m_pBMI1-bmiHeader.biBitCount=24;m_pBMI1-bmiHeader.biClrImportant=0;m_pBMI1-bmiHeader.biClrUsed=0;m_pBMI1-bmiHeader.

14、biCompression=0;m_pBMI1-bmiHeader.biHeight=biHeight;m_pBMI1-bmiHeader.biPlanes=1;m_pBMI1-bmiHeader.biSize=40;m_pBMI1-bmiHeader.biSizeImage=WIDTHBYTES(biWidth*8)*biHeight*3;m_pBMI1-bmiHeader.biWidth=biWidth;m_pBMI1-bmiHeader.biXPelsPerMeter=0;m_pBMI1-bmiHeader.biYPelsPerMeter=0;/pData2=(BYTE*)newchar

15、biWidth1*biHeight1*3;/申请存放小图像的缓冲区Read(pData2,biWidth1*biHeight1*3);/向该缓冲区读数据m_pBMI2=newBITMAPINFO;m_pBMI2-bmiHeader.biBitCount=24;m_pBMI2-bmiHeader.biClrImportant=0;m_pBMI2-bmiHeader.biClrUsed=0;m_pBMI2-bmiHeader.biCompression=0;m_pBMI2-bmiHeader.biHeight=biHeight1;m_pBMI2-bmiHeader.biPlanes=1;m_pBMI2-bmiHeader.biSize=40;m_pBMI2-bmiHeader.biSizeImage=WIDTHBYTES(biWidth1*8)*biHeight1*3;m_pBMI2-bmiHeader.biWidth=biWidth1;m_pBMI2-bmiHeader.biXPelsPerMeter=0;m_pBMI2-bmiHeader.biYPelsPerMeter=0;/下面实现画中画的显示CDCMemDc;MemDc.CreateCompatibleDC(dc);bitmap.CreateCompatibleBitmap(dc,biWidth,biH

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号