- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VC数字图像处理编程讲座之五
VC数字图像处理编程讲座之五
第四节 BMP图像操作的补充篇 上一讲中我们介绍了图像特效显示操作的实现方法,如随机显示效果、马赛克效果、拉幕显示效果等,由于篇幅的限制,还有许多效果没有介绍;本期讲座将接着上一讲的内容,继续介绍一些图像特效显示效果。另外,我们前面的学习都是针对现成的BMP图像,在实际工作学习中,绝大部分处理图像过程都是在一个系统环境中,也就是说需要和图像数据的获取设备直接打交道,一般情况下,计算机图像处理系统从系统层次上可分为高、中、低档三个层次,目前比较普及的是低档次的系统,该系统由CCD(摄像头)、图像采集卡、计算机三个部分组成,其结构简单,应用方便,效果也比较不错,得到的图像较清晰,所以目前在工程应用中采用的比较多。这就给开发人员带来一个现实的问题,如何使用图像采集卡呢?目前虽然各种编程资源中基于VC开发经验的文章不少,但是关于如何在VC开发平台上使用图像采集卡的文章的确没发现,笔者借这期讲座的宝贵机会,补充介绍一下如何在程序中编写自己的代码来操作图像采集卡,从而搭建一个完整的图像处理系统。希望通过这部分内容的学习,在读者的脑海里就可以建立一个完整的图像操作系统概念;同时也能够给目前正需要利用图像采集卡开发自己的图像处理系统的朋友有所帮助。 1. 抖动图像 在上一节讲座中,我们讲到了如何实现图象的雕刻和浮雕效果,它们的实现思想是通过求取没有处理过的相邻两个像素之间的差值来实现的。如果没有限制以前没有处理过的两个像素之间的操作,取而代之的是处理以前已经操作过的像素,那末就可以将一个像素的灰度值传递到与其相邻的若干像素。事实上,有时后我们必须通过上述的约定才能实现一些效果,如图像的抖动效果。例如,为了使图象看起来好象从左上角向右下角扫过,以产生运动的感觉,必须要反复拷贝左上方的那些像素的灰度值,逐步把它们融合在一起,看起来好象图像后边有一些颜色在逐渐的消失,这就是我们要讲的图象的抖动效果。下面给出了该效果的实现代码:
void CDibView::OnDouDongImage() //产生抖动效果图函数{ HANDLE data1handle;//用来存放图像数据的句柄; LPBITMAPINFOHEADER lpBi;//图像的信息头结构; CDibDoc *pDoc=GetDocument();//得到文挡指针; HDIB hdib;//用来存放图像数据的句柄; unsigned char *pData;//指向原始图像数据的指针; unsigned char *data;//指向处理后图像数据的指针; hdib=pDoc-m_hDIB;//拷贝存放已经读取的图像文件数据句柄; lpBi=(LPBITMAPINFOHEADER)GlobalLock((HGLOBAL)hdib);//获取图像信息头;pData=(unsigned char*)FindDIBBits((LPSTR)lpBi);//FindDIBBits是我定义的一个函数,根据图像的结构得到位图的灰度值数据;pDoc-SetModifiedFlag(TRUE);//设置文档修改标志为真,为后续的修改存盘作准备;data1handle=GlobalAlloc(GMEM_SHARE,WIDTHBYTES(lpBi-biWidth*8)*lpBi-biHeight); //声明一个缓冲区用来暂存处理后的图像数据;data=(unsigned char*)GlobalLock((HGLOBAL)data1handle);//得到该缓冲区的指针;AfxGetApp()-BeginWaitCursor();int i,j,buf;for( i=lpBi-biHeight; i=2; i--)//从图像右下角开始对图像的各个像素进行抖动处理; for( j=lpBi-biWidth; j=2; j--) {//抖动处理、从图像的右下角开始计算图像斜上方相邻像素的均值;buf=(*(pData+(lpBi-biHeight-i)*WIDTHBYTES(lpBi-biWidth*8)+j)+*(pData+(lpBi-biHeight-i+1)*WIDTHBYTES(lpBi-biWidth*8)+j-1))/2;if(buf255) buf=255;//限制像素点的灰度范围为0-255;if(buf0)buf=0; *(data+(lpBi-biHeight-i)*WIDTHBYTES(lpBi-biWidth*8)+j)=(BYTE)buf;}for( j=0; jbiHeight; j++)for( i=0; ibiWidth; i++)//重新写回原始图像的数据缓冲区;*(
文档评论(0)