《数字图像处理试题库》由会员分享,可在线阅读,更多相关《数字图像处理试题库(27页珍藏版)》请在金锄头文库上搜索。
1、试题库一、填空题:1彩色图像的灰度化处理,将真彩色图像转化成256色灰度图像。要求:转换关系为:Gray(i,j)=0.11R(i,j)+0.59G(i,j)+0.3B(i,j)(1) 获取原图像像素的首地址,及图像的高度和宽度; (2) 得到像素的蓝、绿、红的三个分值;(3) 按照公式要求,计算Gray(i,j);(4) 将该值返回给蓝、绿、红三个分量。void MakeColorDib:MakegGray() BYTE *p_data; int wide,height,DibWidth; p_data=this-GetData (); wide=this-GetWidth (); heig
2、ht=this-GetHeight (); DibWidth=this-GetDibWidthBytes(); for(int j=0;j height;j+ )for(int i=0;i DibWidth;i+=3)BYTE* pbyBlue = p_data+; /得到蓝色值BYTE* pbyGreen = p_data+; /得到绿色值BYTE* pbyRed = p_data+; /得到红色值BYTE r = *pbyRed; BYTE g = *pbyGreen; BYTE b = *pbyBlue; gray =0.11*r+0.59*g+0.3*b *pbyBlue = gray
3、; /将取到的最大值赋给像素的蓝分量*pbyGreen = gray; /将取到的最大值赋给像素的绿分量*pbyRed = gray; /将取到的最大值赋给像素的红分量for(int j= height/3;j2*height/3;j+) / 每行for(int i=0;iDibWidth;i+) / 每列int a=*p_data; /取得当前点的值*p_data=255-a; /取反p_data+; /指向下一指针 for(int j=2*height/3;jheight;j+) / 每行for(int i=0;i128)?a:(255-a); /调整2目标物体的轮廓提取。要求:(1)获取
4、原图像像素的首地址,及图像的高和宽;(2)开辟一块内存缓冲区,存储处理后的图像像素;(3)计算图像的平均灰度值,以平均灰度值作为阈值T;(4)对图像进行二值化预处理,像素灰度值大于T的置白,否则置黑;(5)将像素点的8邻域像素读入数组中,如果8个邻域像素都和中心点相同,在内存缓区将该像素点置白,否则保持不变;(6)重复执行(3),对每一个像素进行处理;(7)将处理后的图像数据复制到原图像中。void BingXingBianJieDib:Lunkuotiqu()LPBYTE p_data, lpSrc; int wide,height; int i,j; int n1,n2,n3,n4,n5,
5、n6,n7,n8; lpSrc=this-GetData();p_data=lpSrc;wide=this-GetWidth ();height=this-GetHeight ();/计算图像的平均灰度值T,再进行二值化预处理,像素灰度值大于T的置白,否则置黑。for(j=0;jheight;j+) /对图像进行二值化预处理for( i=0;i128) *p_data=255;else *p_data=0; p_data+; p_data=lpSrc; LPBYTE temp=new BYTEwide*height; memset( temp,255,sizeof( temp); for(j=
6、1;jheight-1;j+)for(i=1;iGetData();height=this-GetHeight ();wide=this-GetWidth ();4根据结构编程实现图像的闭运算。要求:(1)得原图像的首地址及图像的宽和高。(图像已经二值化,背景为白,物体为黑)。(2)辟一块内存缓冲区,并初始化为255。(3)定义一个结构数组B9。B 9 = (4)为防越界,不处理最左边、最右边、最上边和最下边四边的像素,从第2行第2列开始进行闭运算。(5)循环步骤4,直到处理完原图的全部像素点。(6)将结果从内存复制到原图的数据区。void FuShiYuPengZhangDib:Onfush
7、i() int i,j,m,n;LPBYTE p_data;LPBYTElpSrc;LPBYTElpDst;LPBYTEtemp;p_data = GetData();LONG wide= GetWidth();LONG height =GetHeight();temp =new BYTEwide*height;lpDst = (LPBYTE)temp;memset(lpDst, (BYTE)255, wide * height);/ 33的结构元素int B9 = 1, 0, 1,0, 0, 0,1, 0, 1;/ 使用全方向的结构元素进行腐蚀for (j = 1; j height - 1
8、; j+)for (i = 1; i wide - 1; i+)/ 由于使用33的结构元素,为防止越界,所以不处理最左、右、上、下四/边的像素/ 指向源图像倒数第j行,第i个象素的指针lpSrc = (unsigned char *)(p_data + wide * j + i);/ 指向目标图像倒数第j行,第i个象素的指针lpDst = (unsigned char *)(temp + wide * j + i);/ 目标图像中的当前点先赋成黑色*lpDst = 0;/ 如果源图像中33结构元素对应位置有白点/ 则将目标图像中的(0,0)点赋成白色for (m = 0; m 3; m+)fo
9、r (n = 0; n 128)*lpDst = 255;break;memcpy(p_data, temp, wide * height);delete temp;5编程实现图像的渐隐。要求:显示一幅位图,像素浓度由亮到暗,逐渐减弱,直至全黑。请写出渐隐的程序代码。void CDynSplitView2:OnJianyin() CDC *pDC=GetDC();CRect rect(0,0,1000,1000);CBrush brush(RGB(255,255,255);pDC-FillRect(&rect,&brush);clearmem();CDSplitDoc* pDoc = GetD
10、ocument();ASSERT_VALID(pDoc);if(!pDoc -statedoc&state2=1 ) BYTE* pBitmapData = CDibNew1-GetData(); LPBITMAPINFO pBitmapInfo = CDibNew1-GetInfo(); int bitmapHeight= CDibNew1-GetHeight(); int bitmapWidth = CDibNew1-GetWidth();if (CDibNew1-GetRGB() / Has a color tableCPalette* hPalette=CreateBitmapPalette(CDibNew1);CPalette * hOldPalette =pDC-SelectPalette(hPalette, true);pDC-RealizePalette();LPBYTE temp,temp1,temp2;temp=new BYTECDibNew1-GetHeight()*CDibNew1-GetHeight();me