欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年数字图像处理源码借鉴 .pdf

    • 资源ID:32505086       资源大小:94.01KB        全文页数:10页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年数字图像处理源码借鉴 .pdf

    跟我学图象处理编程- 图象的半影调和抖动技术第1页第四章图象的半影调和抖动技术在介绍本章内容之前,先提出一个问题?普通的黑白针式打印机能打出灰度图来吗?如果说能, 从针式打印机的打印原理来分析,似乎是不可能的。因为针打是靠撞针击打色带在纸上形成黑点的,不可能打出灰色的点来;如果说不能, 可是我们的确见过用针式打印机打印出来的灰色图象。到底是怎么回事呢?你再仔细看看那些打印出来的所谓的灰色图象,最好用放大镜看。你会发现,原来这些灰色图象都是由一些黑点组成的,黑点多一些, 图象就暗一些; 黑点少一些, 图案就亮一些。下面这几张图就能说明这一点。图 1. 用黑白两种颜色打印出灰度效果图中最左边的是原图,是一幅真正的灰度图,另外三张图都是黑白二值图。容易看出,最左的那幅和原图最接近。由二值图象显示出灰度效果的方法,就是我们今天要讲的半影调(halftone)技术,它的一个主要用途就是在只有二值输出的打印机上打印图象。我们介绍两种方法:图案法和抖动法。1. 图案法 (patterning) 图案法是指灰度可以用一定比例的黑白点组成的区域表示,从而达到整体图象的灰度感。黑白点的位置选择称为图案化(patterning) 。在具体介绍图案法之前,先介绍一下分辨率的概念。计算机显示器,打印机,扫描仪等设备的一个重要指标就是分辨率,单位是dpi(dot per inch) ,即每英寸点数,点数越多,分辨率就越高, 图象就越清晰。让我们来计算一下,计算机显示器的分辨率有多高。设显示器为15 英寸(指对角线长度) ,最多显示 1280*1024 个点。因为宽高比为4:3,则宽有 12 英寸,高有 9 英寸,则该显示器的水平分辨率为106dpi,垂直分辨率为113.8dpi。一般的激光打印机的分辨率有300dpi*300dpi 的,有 600dpi*600dpi的, 720dpi*720dpi 。所以打出来的图象要比计算机显示出来的清晰的多。扫描仪的分辨率要高一些,数码相机的分辨率更高。言归正传,前面讲了,图案化使用图案来表示像素的灰度,那么我们来做一道计算题。假设有一幅240*180*8bit的灰度图,当用分辨率为300dpi*300dpi 的激光打印机将其打印到12.8*9.6 英寸的纸上时,每个像素的图案有多大?这道题很简单,这张纸最多可以打(300*12.8)*(300*9.6)=3840*2880个点,所以每个像素可以用 (3840/240)*(2880/180)=16*16个点大小的图案来表示,即一个像素256 个点。 如果这 16*16 的方块中一个黑点也没有,就可以表示灰度256,有一个黑点, 就表示灰度255,依次类推,当都是黑点时,表示灰度0,这样, 16*16 的方块可以表示257 级灰度。比要求的 8bit 共 256 级灰度还多了一个,所以上面的那幅图的灰度级别完全能够打印出来。这里有一个图案构成的问题,即黑点打在哪里?比如说,只有一个黑点时,我们可以打在正中央, 也可以打 16*16 的左上角。 图案可以是规则的,也可以是不规则的。一般情况下,有规则的图案比随即图案能够避免点的丛集,但有时会导致图象中有明显的线条。如图 1 中,2*2 的图案可以表示5 级灰度,当图象中有一片灰度为的1 的区域时,如图2 所示,有明显的水平和垂直线条。图 2. 2*2 的图案名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 10 页 - - - - - - - - - 跟我学图象处理编程- 图象的半影调和抖动技术第2页图 3. 规则图案导致线条如果想存储256 级灰度的图案, 就需要 256*16*16 的二值点阵, 占用的空间还是相当可观的。有一个更好的办法是:只存储一个整数矩阵,称为标准图案,其中的每个值从0 到255。图象的实际灰度和阵列中的每个值比较,当该值大于等于灰度时,对应点打一黑点。下面举一个25 级灰度的例子加以说明。图 4. 标准图案举例图 4 中,左边为标准图案,右边为灰度为15 的图案,共有10 个黑点, 15 个白点。其实道理很简单,灰度为0 时全是黑点,灰度每增加1,减少一个黑点。要注意的是,5*5 的图案可以表示26 种灰度,灰度25 才是全白点,而不是24。下面介绍一种设计标准图案的算法,是由Limb 在 1969 年提出的。以一个 2*2 的矩阵开始M1=0 23 1,通过递归关系有Mn+1=4*Mn4*Mn+2*Un4*Mn+3*Un4*Mn+Un,其中 2n*2n是阵列中元素的个数,Un 是一个 2n*2n的方阵, 所有元素都是1。根据这个算法, 可以得到M2=0 82 1012 4 14 63 11 1915 7 13 5,为 16 级灰度的标准图案。M3(8*8 阵)比较特殊,称为Bayer 抖动表。 M4 是一个 16*16 的矩阵。根据上面的算法,如果利用M3,一个像素要用8*8 的图案表示,则一幅N*N 的图将变成 8N*8N 大小。如果利用M4,就更不得了,变成16N*16N 了。能不能在保持原图大小的情况下利用图案化技术呢?一种很自然的想法是:如果用 M2 阵,则将原图中每8*8 个点中取一点,即重新采样,然后再应用图案化技术,就能够保持原图大小。实际上,这种方法并不可行。 首先,你不知道这8*8 个点中找哪一点比较合适,另外, 8*8 的间隔实在太大了,生成的图象和原图肯定相差很大,就象图1 最右边的那幅图一样。我们可以采用这样的做法:假设原图是256 级灰度,利用Bayer 抖动表,做如下处理if (gyx2) bayery&7x&7 then 打一白点else 打一黑点其中, x,y 代表原图的像素坐标,gyx 代表该点灰度。首先将灰度右移两位,变成64 级,然后将 x,y 做模 8 运算,找到Bayer 表中的对应点,两者做比较,根据上面给出的判据做处理。我们可以看到,模8 运算使得原图分成了一个个8*8 的小块,每个小块和8*8 的 Bayer表相对应。 小块中的每个点都参与了比较,这样就避免了上面提到的选点和块划分过大的问题。模 8 运算实质上是引入了随机成分,这就是我们下面要讲到的抖动技术。下面的图5就是利用这个算法,使用 M3(Bayer 抖动表 )阵得到的, 图 6 是使用 M4 阵得到的,可见两者的差别并不是很大,所以一般用Bayer 表就可以了。图 5. 利用 M3 抖动生成的图图 6. 利用 M4 抖动生成的图下面是算法的源程序,是针对Bayer 表的,因为它是个常用的表,我们不再利用Limb公式,而是直接给出。针对M4 阵的算法是类似的,不同的地方在于,要用Limb 公式得到M4 阵,灰度也不用右移2 位。要注意的是,为了处理的方便,我们的结果图仍采用256 级灰度图,不过只用到了0和 255 两种灰度。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 10 页 - - - - - - - - - 跟我学图象处理编程- 图象的半影调和抖动技术第3页BYTE BayerPattern88=0,32,8,40,2,34,10,42, 48,16,56,24,50,18,58,26, 12,44,4,36,14,46,6,38, 60,28,52,20,62,30,54,22, 3,35,11,43,1,33,9,41, 51,19,59,27,49,17,57,25, 15,47,7,39,13,45,5,37, 63,31,55,23,61,29,53,21; BOOL LimbPatternM3(HWND hWnd) DWORD BufSize; LPBITMAPINFOHEADER lpImgData; LPSTR lpPtr; HLOCAL hTempImgData; LPBITMAPINFOHEADER lpTempImgData; LPSTR lpTempPtr; HDC hDc; HFILE hf; LONG x,y; unsigned char num; BufSize=bf.bfSize-sizeof(BITMAPFILEHEADER);/要开的缓冲区大小if(hTempImgData=LocalAlloc(LHND,BufSize)=NULL) MessageBox(hWnd,Error alloc memory!,Error Message,MB_OK| MB_ICONEXCLAMATION); return FALSE; lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData); lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData); /拷贝头信息和位图数据memcpy(lpTempImgData,lpImgData,BufSize); for(y=0;ybi.biHeight;y+) /lpPtr 为指向原图位图数据的指针lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes); /lpTempPtr 为指向新图位图数据的指针lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes-y*LineBytes); for(x=0;x2) BayerPatterny&7x&7) /右移两位后做比较*(lpTempPtr+)=(unsigned char)255; / 打白点else *(lpTempPtr+)=(unsigned char)0; / 打黑点 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 10 页 - - - - - - - - - 跟我学图象处理编程- 图象的半影调和抖动技术第4页 if(hBitmap!=NULL) DeleteObject(hBitmap); hDc=GetDC(hWnd); /形成新的位图hBitmap=CreateDIBitmap(hDc, (LPBITMAPINFOHEADER)lpTempImgData, (LONG)CBM_INIT, (LPSTR)lpTempImgData+sizeof(BITMAPINFOHEADER) +NumColors*sizeof(RGBQUAD), (LPBITMAPINFO)lpTempImgData, DIB_RGB_COLORS); hf=_lcreat(c:limbm3.bmp,0); _lwrite(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER); _lwrite(hf,(LPSTR)lpTempImgData,BufSize); _lclose(hf); /释放内存和资源ReleaseDC(hWnd,hDc); LocalUnlock(hTempImgData); LocalFree(hTempImgData); GlobalUnlock(hImgData); return TRUE; 2. 抖动法 (dithering) 让我们考虑更坏的情况:即使使用了图案化技术,仍然得不到要求的灰度级别。举例说明:假设有一幅600*450*8bit 的灰度图,当用分辨率为300dpi*300dpi 的激光打印机将其打印到 8*6 英寸的纸上时, 每个像素可以用 (2400/600)*(1800/450)=4*4个点大小的图案来表示,最多能表示17 级灰度,无法满足256 级灰度的要求。可有两种解决方案:1.减小图象尺寸,由 600*450 变为 150*113;2.降低图象灰度级,由256 级变成 16 级。这两种方案都不理想。这时,我们就可以采用“抖动法(dithering) ”的技术来解决这个问题。其实刚才给出的算法就是一种抖动算法,称为规则抖动 (regular dithering) 。规则抖动的优点是算法简单;缺点是图案化有时很明显,这是因为取模运算虽然引入了随机成分,但还是有规律的, 另外,点之间进行比较时,只要比标准图案上点的值大就打白点,这种做法并不理想,因为,如果当标准图案点的灰度值本身就很小,而图象中点的灰度只比它大一点儿时,图象中的点更接近黑色,而不是白色。一种更好的方法是将这个误差传播到邻近的像素。下面介绍的Floyd-Steinberg 算法就采用了这种方案。假设灰度级别的范围从b(black)到 w(white) ,中间值t 为( b+w)/2,对应 256 级灰度,b=0;w=255;t=127.5;设原图中像素的灰度为g,误差值为e,则新图中对应像素的值用如下的方法得到:if g t then 打白点e=g-w 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 10 页 - - - - - - - - - 跟我学图象处理编程- 图象的半影调和抖动技术第5页else 打黑点e=g-b 3/8 * e 加到右边的像素3/8 * e 加到下边的像素1/4 * e 加到右下方的像素算法的意思很明白,以256 级灰度为例,假设一个点的灰度为130,在灰度图中应该是一个灰点。由于一般图象中灰度是连续变化的,相邻像素的灰度值很可能与本像素非常接近,所以该点及周围应该是一片灰色区域。在新图中,130 大于 128,所以打了白点,但130 离真正的白点255 还差的比较远,误差e=130-255=-125 比较大。,将 3/8*(-125) 加到相邻像素后,使得相邻像素的值接近0 而打黑点。下一次,e 又变成正的,使得相邻像素的相邻像素打白点,这样一白一黑一白,表现出来刚好就是灰色。如果不传递误差,就是一片白色了。再举个例子,如果一个点的灰度为250,在灰度图中应该是一个白点,该点及周围应该是一片白色区域。在新图中,虽然e=-5 也是负的,但其值很小,对相邻像素的影响不大,所以还是能够打出一片白色区域来。这样就验证了算法的正确性。其它的情况你可以自己推敲。图 7. 利用 Floyd-Steinberg 算法抖动生成的图图 6 是利用 Floyd-Steinberg 算法抖动生成的图下面我们给出Floyd-Steinberg 算法的源代码。 有一点要说明, 我们原来介绍的程序都是先开一个 char 类型的缓冲区,用来存储新图数据,但在这个算法中,因为e 有可能是负数,为了防止得到的值超出char 能表示的范围,我们使用了一个int 类型的缓冲区存储新值。另外,当按从左到右,从上到下的顺序处理像素时,处理过的像素以后不会再用到了,所以用这个int 类型的缓冲区存储新值是可行的。全部像素处理完后, 再将这些值拷贝到char类型的缓冲区去。BOOL Steinberg(HWND hWnd) DWORD OffBits,BufSize,IntBufSize; LPBITMAPINFOHEADER lpImgData; HLOCAL hTempImgData; LPBITMAPINFOHEADER lpTempImgData; LPSTR lpPtr; LPSTR lpTempPtr; HDC hDc; HFILE hf; LONG x,y; unsigned char num; float e,f; HLOCAL hIntBuf; int *lpIntBuf,*lpIntPtr; int tempnum; /OffBits 为 BITMAPINFOHEADER结构长度加调色板的大小OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER); BufSize=bf.bfSize-sizeof(BITMAPFILEHEADER); /要开的缓冲区的大小if(hTempImgData=LocalAlloc(LHND,BufSize)=NULL) /char 类型的缓冲区名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 10 页 - - - - - - - - - 跟我学图象处理编程- 图象的半影调和抖动技术第6页 MessageBox(hWnd,Error alloc memory!,Error Message,MB_OK| MB_ICONEXCLAMATION); return FALSE; IntBufSize=(DWORD)bi.biHeight*LineBytes*sizeof(int); /int类型缓冲区的大小if(hIntBuf=LocalAlloc(LHND,IntBufSize)=NULL) /int 类型的缓冲区 MessageBox(hWnd,Error alloc memory!,Error Message,MB_OK| MB_ICONEXCLAMATION); LocalFree(hTempImgData); return FALSE; lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData); lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData); lpIntBuf=(int *)LocalLock(hIntBuf); /拷贝头信息memcpy(lpTempImgData,lpImgData,OffBits); /将图象数据拷贝到int 类型的缓冲区中for(y=0;ybi.biHeight;y+) lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes); lpIntPtr=(int *)lpIntBuf+(bi.biHeight-1-y)*LineBytes; for(x=0;xbi.biWidth;x+) *(lpIntPtr+)=(unsigned char)*(lpPtr+); for(y=0;ybi.biHeight;y+) for(x=0;x 128 ) /128是中值*lpIntPtr=255; / 打白点e=(float)(num-255.0); / 计算误差 else *lpIntPtr=0; / 打黑点e=(float)num; / 计算误差 if(xbi.biWidth-1) /注意判断边界f=(float)*(lpIntPtr+1); f+=(float)( (3.0/8.0) * e); *(lpIntPtr+1)=(int)f; /向左传播 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 10 页 - - - - - - - - - 跟我学图象处理编程- 图象的半影调和抖动技术第7页if(ybi.biHeight-1) /注意判断边界f=(float)*(lpIntPtr-LineBytes); f+=(float)( (3.0/8.0) * e); *(lpIntPtr-LineBytes)=(int)f; /向下传播f=(float)*(lpIntPtr-LineBytes+1); f+=(float)( (1.0/4.0) * e); *(lpIntPtr-LineBytes+1)=(int)f; /向右下传播 /从 int 类型的缓冲区拷贝到char 类型的缓冲区for(y=0;ybi.biHeight;y+) lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes-y*LineBytes); lpIntPtr=(int *)lpIntBuf+(bi.biHeight-1-y)*LineBytes; for(x=0;x255) tempnum=255; else if (tempnum“缩放” -“显示网格”菜单,如下图所示:图 9. 字符“ 1”的灰度这时数数字符“ 1”用了几个点?是22 个。我想你已经明白了,字符的灰度和它所占的黑色点数有关,点越少,灰度值越大,空格字符的灰度最大,为全白,因为它一个黑点也没有;而字符“ W”的灰度值就比较低了。每个字符的面积是8*16 (宽 *高) ,所以一个字符的灰度值可以用如下的公式计算(1-所占的黑点数 /(8*16) )*255。下面是可显示的字符,及对应的灰度,共有95 个。这可是我辛辛苦苦整理出来的呦!static char ch95= , ,1,2,3,4,5,6,7,8,9,0,-,=, q,w,e,r,t,y,u,i,o,p, a,s,d,f,g,h,j,k,l,;, z,x,c,v,b,n,m,.,/, ,!,#,$,%,&,*,(,),_,+,|, Q,W,E,R,T,Y,U,I,O,P, A,S,D,F,G,H,J,K,L,:, Z,X,C,V,B,N,M,? ; static int gr95= 0, 7,22,28,31,31,27,32,22,38,32,40, 6,12,20,38,32,26,20,24,40, 29,24,28,38,32,32,26,22,34,24,44,33,32,32,24,16, 6,22,26,22, 26,34,29,35,10, 6,20,14,22,47,42,34,40,10,35,21,22,22,16,14, 26,40,39,29,38,22,28,36,22,36,30,22,22,36,26,36,25,34,38,24, 36,22,12,12,26,30,30,34,39,42,41,18,18,22 ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 10 页 - - - - - - - - - 跟我学图象处理编程- 图象的半影调和抖动技术第9页下面的这段程序实现了bmp2txt 的功能,结果存到文件bmp2txt.txt 中。/ BOOL Bmp2Txt(HWND hWnd) DWORD OffBits,BufSize; LPBITMAPINFOHEADER lpImgData; LPSTR lpPtr; HFILE hf; int i, j, k,h,tint,grayindex; char tchar; int TransHeight, TransWidth; /先用起泡排序,将灰度值按从小到大的顺序排列,同时调整对应的字符位置for(i=0;i94;i+) for(j=i+1;jgrj) tchar=chi,tint=gri; chi=chj,gri=grj; chj=tchar,grj=tint; /OffBits 为 BITMAPINFOHEADER结构长度加调色板的大小OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER); BufSize=bf.bfSize-sizeof(BITMAPFILEHEADER); /要开的缓冲区的大小lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData); TransWidth = bi.biWidth/8; /每行字符的个数TransHeight = bi.biHeight/16; /共有多少行字符hf=_lcreat(c:bmp2txt.txt,0); for(i=0;iTransHeight;i+) for(j=0;jTransWidth;j+) grayindex=0; for(k=0;k16;k+) for(h=0;h8;h+) / 求出 8*16 小块中各像素灰度之和lpPtr=(char *)lpImgData+BufSize-LineBytes-(i*16+k)*LineBytes+ j*8+h; grayindex+=(unsigned char)*lpPtr; grayindex/=16*8; / 除以整个面积grayindex=gr94*grayindex/255; k=0; while(grk+1grayindex) k+; /寻找灰度最接近的字符名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 10 页 - - - - - - - - - 跟我学图象处理编程- 图象的半影调和抖动技术第10页_lwrite(hf,(char *)&chk,sizeof(char); /将该字符写入文件中 tchar=(char)13; _lwrite(hf,(char *)&tchar,sizeof(char); tchar=(char)10; _lwrite(hf,(char *)&tchar,sizeof(char); /每行加一个回车换行符 _lclose(hf); GlobalUnlock(hImgData); return TRUE; 上面的程序中, 只考虑了 8*16 小块的平均灰度,而没有考虑小块内部像素的灰度分布。更精确的方法是将图象8*16 小块和字符 8*16 小块每两个对应点之间相减,做平方误差计算,找出有最小平方误差的那个字符,来代表这一小块图象。显然,计算量要比刚才的大得多。这里我们就不给出程序了,有兴趣的读者可以自己实现。其实利用图案化技术,还可以实现更有趣的应用,如下面这幅图,你仔细看看,贝多芬的头像是由许多个音乐符号组成的。图 10. 贝多芬的头像名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 10 页 - - - - - - - - -

    注意事项

    本文(2022年数字图像处理源码借鉴 .pdf)为本站会员(H****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开