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 (); h
2、eight=this-GetHeight (); DibWidth=this-GetDibWidthBytes(); for(int j=0;j128)?a:(255-a); /调整2目标物体的轮廓提取。要求:(1)获取原图像像素的首地址,及图像的高和宽;(2)开辟一块内存缓冲区,存储处理后的图像像素;(3)计算图像的平均灰度值,以平均灰度值作为阈值 T;(4)对图像进行二值化预处理,像素灰度值大于 T 的置白,否则置黑;(5)将像素点的 8 邻域像素读入数组中,如果 8 个邻域像素都和中心点相同,在内存缓区将该像素点置白,否则保持不变;(6)重复执行(3),对每一个像素进行处理;(7)将处理
3、后的图像数据复制到原图像中。void BingXingBianJieDib:Lunkuotiqu()LPBYTE p_data, lpSrc; int wide,height; int i,j; int n1,n2,n3,n4,n5,n6,n7,n8; lpSrc=this-GetData();p_data=lpSrc;wide=this-GetWidth ();height=this-GetHeight ();/计算图像的平均灰度值 T,再进行二值化预处理,像素灰度值大于 T 的置白,否则置黑。for(j=0;j128)*p_data=255;else*p_data=0; p_data+;
4、p_data=lpSrc; LPBYTE temp=new BYTEwide*height; memset( temp,255,sizeof( temp); for(j=1;jGetData();height=this-GetHeight ();wide=this-GetWidth ();4根据结构 编程实现图像的闭运算。1 0 要求:(1)得原图像的首地址及图像的宽和高。 (图像已经二值化,背景为白,物体为黑) 。(2)辟一块内存缓冲区,并初始化为 255。(3)定义一个结构数组 B9。B 9 = 10 (4)为防越界,不处理最左边、最右边、最上边和最下边四边的像素,从第 2 行第 2 列开
5、始进行闭运算。(5)循环步骤 4,直到处理完原图的全部像素点。(6)将结果从内存复制到原图的数据区。void FuShiYuPengZhangDib:Onfushi()int i,j,m,n;LPBYTE p_data;LPBYTE lpSrc;LPBYTE lpDst;LPBYTE temp;p_data = GetData();LONG wide= GetWidth();LONG height =GetHeight();temp =new BYTEwide*height;lpDst = (LPBYTE)temp;memset(lpDst, (BYTE)255, wide * height)
6、;/ 33 的结构元素int B9 = 1, 0, 1,0, 0, 0,1, 0, 1;/ 使用全方向的结构元素进行腐蚀for (j = 1; j 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)
7、;pDC-FillRect(clearmem();CDSplitDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if(!pDoc -statedocLPBITMAPINFO pBitmapInfo = CDibNew1-GetInfo();int bitmapHeight= CDibNew1-GetHeight();int bitmapWidth = CDibNew1-GetWidth();if (CDibNew1-GetRGB() / Has a color tableCPalette* hPalette=CreateBitmapPalette(CD
8、ibNew1);CPalette * hOldPalette =pDC-SelectPalette(hPalette, true);pDC-RealizePalette();LPBYTE temp,temp1,temp2;temp=new BYTECDibNew1-GetHeight()*CDibNew1-GetHeight();memset (temp,0,CDibNew1-GetHeight()*CDibNew1-GetHeight();for(int n=0;nGetSafeHdc(),0, 0, bitmapWidth, bitmapHeight,0, 0, bitmapWidth,
9、bitmapHeight,temp,pBitmapInfo,DIB_RGB_COLORS, SRCCOPY);Sleep(0.0005);pDC-SelectPalette(hOldPalette, true);:DeleteObject(hPalette);delete temp; 6对灰度图像进行 NN 十字型中值滤波处理。要求:(1)取得图像大小、数据区,并把数据区复制到缓冲区中;(2)取得 N 值;(3)循环取得各点像素值;(4)对以该点为中心的 N*N 十字型屏蔽窗口包括的各像素值进行排序,得到中间值;(5)把该点像素值置为中间值;(6)把缓冲区中改动的数据复制到原数据区中。void
10、 ZaoShengXiaoChuDib:nnzhong(int n)DWORD size;size=GetSize();BYTE* p_temp=new BYTE size;memset(p_temp,255,size);int yy,xx,n2,nn,chuo,chg,m,medi,madom,mado1000;BYTE *p_data; int wide,height; if(n=3nn=n*n;chuo=(nn-1)/2;p_data=this-GetData();wide=this-GetWidth(); height=this-GetHeight(); for(int j=n2;jG
11、etRGB();UINT numberOfColors = pBitmap-GetNumberOfColors();for(UINT x=0; x0)/图像的高与宽long wide=this-GetWidth();p_data=this-GetData();答:LPBYTE temp; LONGi; / 循环变量LONGj; temp = new BYTEwide*height; / 暂时分配内存,以保存一行图像/ 针对上半图像进行操作for(i = 0; i wide;i+) for(j = 0; j height; j+) lpSrc = (LPBYTE)p_data + wide *
12、j+i; lpDst = (LPBYTE)temp + wide * (height - j - 1)+i; *lpDst = *lpSrc; memcpy(p_data,temp, wide*height); / 释放内存delete temp;10将图像中的红色球体进行左右、上下、对称复制。原图 处理后的图像void TuXianFuZhiDib:Onfuzhi()LPBYTE p_data;p_data = GetData();LONG wide= GetWidth();LONG height =GetHeight();11编程实现 24 位彩色图像进行处理。要求:将 24 位彩色图像平均分成三个等高的区域,对这三个区域分别进行灰度化处理、逆反处理、曝光处理。(1)对第一个区域进行灰度变换。Gray(i,j)=0.11R(i,j)+0.59G(i,j)+0.3B(i,j)(2)对第二个区域进行逆反处理。(3)对第三个区域进行曝光处理。