ImageVerifierCode 换一换
格式:DOC , 页数:18 ,大小:1.02MB ,
资源ID:2152708      下载积分:8 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/2152708.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(图像处理实验.doc)为本站上传会员【a199****6536】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

图像处理实验.doc

1、 图像处理实验部分 打开图像 1. 创建MFC Application工程: 文件名称:MyImage 2. 添加cdib.h和cdib.cpp到工程项目中(也可以在工程项目中创建这两个文件,需要编写程序) 3. 在MyImageDoc.h文件中增加如下语句 public: CDib *m_pDib; (此类中增加成员变量表示Cdib对象的指针) 4. 在MyImageDoc.cpp文件中的构造函数中添加: m_pDib = new CDib; 在析构函数中添加 delete m_pDib; 5. 在MyImageDoc.h文件中添加#include "cdib.h

2、" 6. 在Doc.cpp中CMyImageDoc::Serialize(CArchive& ar)函数中添加: m_pDib->Serialize(ar); 用CDib的串行化来实现CDisplayBmpImDoc文档的串行化。 7. 在CMyImageView.h中添加变量声明 18 public: int lWidth; int lHeight; long int lLineBytes; CPoint StartPoint; CPoint EndPoint; bool m_bTwoValue; 8. CMyImageView.cpp

3、文件中的OnDraw()函数中添加代码 void CMyImageView::OnDraw(CDC* pDC) { … CSize size; int lHeight,lWidth; if (pDoc->m_pDib->m_lpBMIH!=NULL) { lWidth=pDoc->m_pDib->m_lpBMIH->biWidth; lHeight=pDoc->m_pDib->m_lpBMIH->biHeight; size.cx=lWidth; size.cy=lHeight; pDoc->m_pDib->Draw(pDC,CPoin

4、t(0,0),size); } } 运行,即可打开一幅BMP格式的图像 一、灰度化与直方图 图1 初始图片 图2 灰度化图片(作为原图片使用) 图3 灰度化图片直方图 灰度化图片直方图生成流程图 二、图像滤波 (一)均值滤波(3*3模板) 基本思想: 基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度值g(x,y)。 步骤如下:

5、 1.在资源菜单menu中Hist Modify中添加菜单按钮Mean Filter 2.ID名称可以随意修改,也可以默认。 3.中CMyImage点击右键,选择属性 在下拉菜单中找到ID_IMGSMOOTHMEANFILTER,添加代码 4.在MyImageView.cpp中出现 void CMyImageView::OnImgsmoothMeanfilter()函数 5.在其中添加代码 void CMyImageView::OnImgsmoothMeanfilter() { CMyImageDoc* pDoc = GetDocument(); int lHeight

6、pDoc->m_pDib->m_lpBMIH->biHeight; int lWidth=pDoc->m_pDib->m_lpBMIH->biWidth; int lLineBytes=(lWidth+3)/4*4; unsigned char *lpSrc; unsigned char *lpDst; unsigned char *lpNewDib; lpNewDib=new unsigned char[lLineBytes*lHeight]; memcpy(lpNewDib,pDoc->m_pDib->m_lpImage,lLineBytes*lHeight)

7、 for (int i = 0; i m_pDib->m_lpImage + lLineBytes* (lHeight-1-i) ; lpDst = lpNewDib + lLineBytes* (lHeight-1-i) ; for (int j =0; j 0 && i0 && j

8、 *(lpSrc+lLineBytes)+*(lpSrc-lLineBytes)+ *(lpSrc+lLineBytes+1)+*(lpSrc-lLineBytes+1)+ *(lpSrc+lLineBytes-1)+*(lpSrc-lLineBytes-1))/9; } lpSrc++;lpDst++; } } memcpy(pDoc->m_pDib->m_lpImage,lpNewDib,lLineBytes*lHeight); Invalidate(true); MessageBox(L"均值滤波"); }

9、 (二)中值滤波(3*3模板) 基本思想: 中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是去某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升的二维数据序列,并取出序列中位于中间位置的灰度作为中心像素的灰度。 步骤如下: 1.在资源菜单menu中Hist Modify中添加菜单按钮Median Filter 2.中CMyImage点击右键,选择属性 在下拉菜单中找到ID_IMGSMOOTHMEDIANFILTER,添加代码 3.在MyImageView.cpp中出

10、现 void CMyImageView::OnImgsmoothMedianfilter()函数 4.在其中添加代码 void CMyImageView::OnImgsmoothMedianfilter() { CMyImageDoc* pDoc = GetDocument(); int lHeight=pDoc->m_pDib->m_lpBMIH->biHeight; int lWidth=pDoc->m_pDib->m_lpBMIH->biWidth; int lLineBytes=(lWidth+3)/4*4; unsigned char *lpSrc;

11、unsigned char *lpDst; unsigned char *lpNewDib; lpNewDib=new unsigned char[lLineBytes*lHeight]; memcpy(lpNewDib,pDoc->m_pDib->m_lpImage,lLineBytes*lHeight); for (int i = 0; i m_pDib->m_lpImage + lLineBytes* (lHeight-1-i) ; lpDst = lpNewDib + lLineBytes*

12、 (lHeight-1-i) ; for (int j =0; j 0 && i0 && j

13、);a[7]=*(lpSrc+lLineBytes-1);a[8]=*(lpSrc-lLineBytes-1); for(n=0;n<9;n++) { for(m=n+1;m<9;m++) if(a[n]m_pDib->m_lpImage,lpNe

14、wDib,lLineBytes*lHeight); Invalidate(true); MessageBox(L"中值滤波"); } (三)均值滤波(5*5模板) 1.在资源菜单menu中Hist Modify中添加菜单按钮Median Filter5 2.中CMyImage点击右键,选择属性 在下拉菜单中找到ID_IMGSMOOTHMEDIANFILTER5,添加代码 3.在MyImageView.cpp中出现 void CMyImageView::OnImgsmoothMedianfilter5()函数 4.在其中添加代码 void CMyImageView::O

15、nImgsmoothMeanfilter5() { … for (int i = 0; i m_pDib->m_lpImage + lLineBytes* (lHeight-1-i) ; lpDst = lpNewDib + lLineBytes* (lHeight-1-i) ; for (int j =0; j 0 && i0 && j

16、lpSrc)+*(lpSrc+1)+*(lpSrc-1)+ *(lpSrc+lLineBytes)+*(lpSrc-lLineBytes)+ *(lpSrc+lLineBytes+1)+*(lpSrc-lLineBytes+1)+ *(lpSrc+lLineBytes-1)+*(lpSrc-lLineBytes-1)+ *(lpSrc-2*lLineBytes)+ *(lpSrc+2*lLineBytes)+ *(lpSrc-2*lLineBytes-1)+ *(lpSrc-2*lLineBytes-2)+ *(lpSrc

17、2*lLineBytes+1)+ *(lpSrc-2*lLineBytes+2)+ *(lpSrc+2*lLineBytes-1)+ *(lpSrc+2*lLineBytes-2)+ *(lpSrc+2*lLineBytes+1)+ *(lpSrc+2*lLineBytes+2)+ *(lpSrc+2)+*(lpSrc-2)+ *(lpSrc+lLineBytes+2)+*(lpSrc-lLineBytes+2)+ *(lpSrc+lLineBytes-2)+*(lpSrc-lLineBytes-2))/15; } l

18、pSrc++;lpDst++; } } memcpy(pDoc->m_pDib->m_lpImage,lpNewDib,lLineBytes*lHeight); Invalidate(true); MessageBox(L"均值滤波5*5"); } (四)中值滤波(5*5模板) 1.在资源菜单menu中Hist Modify中添加菜单按钮Median Filter5 2.中CMyImage点击右键,选择属性 在下拉菜单中找到ID_IMGSMOOTHMEDIANFILTER5,添加代码 3.在MyImageView.cpp中出现 void CMyImage

19、View::OnImgsmoothMedianfilter()函数 4.在其中添加代码 void CMyImageView::OnImgsmoothMedianfilter5() { … for (int i = 0; i m_pDib->m_lpImage + lLineBytes* (lHeight-1-i) ; lpDst = lpNewDib + lLineBytes* (lHeight-1-i) ; for (int j =0; j

20、 if(i>0 && i0 && j

21、 a[9]=*(lpSrc-2*lLineBytes);a[10]=*(lpSrc+2*lLineBytes); a[11]=*(lpSrc-2*lLineBytes-1);a[12]=*(lpSrc-2*lLineBytes-2); a[13]= *(lpSrc-2*lLineBytes+1);a[14]= *(lpSrc-2*lLineBytes+2); a[15]=*(lpSrc+2*lLineBytes-1);a[16]=*(lpSrc+2*lLineBytes-2); a[17] =*(lpSrc+2*lLineBytes+1); a

22、[18]=*(lpSrc+2*lLineBytes+2); a[19]= *(lpSrc+2);a[20]=*(lpSrc-2);a[21]=*(lpSrc+lLineBytes+2); a[22]=*(lpSrc-lLineBytes+2);a[23]=*(lpSrc+lLineBytes-2); a[24]=*(lpSrc-lLineBytes-2); for(n=0;n<25;n++) { for(m=n+1;m<25;m++) if(a[n]

23、]; a[m]=temp; } } *lpDst=a[12]; } lpSrc++;lpDst++; } } memcpy(pDoc->m_pDib->m_lpImage,lpNewDib,lLineBytes*lHeight); Invalidate(true); MessageBox(L"中值滤波"); } (五)运行结果比较和分析 结果分析: 这个取均值的模板其实是一个低通滤波器。因图像细节信息主要分布在高频区域,因此均值滤波的过程会导致图像变模糊。如果模板选取过大,则这种模糊会加剧;模

24、板选择越小,去噪能力会下降。即3*3模板去噪能力没有5*5模板强,但5*5模板的处理室图像更模糊,如图1,2,3,4,5所示。 用3*3的模板和5*5处理图像,结果不一样。5*5的模板产生的图形边缘更模糊,亮点更少。同时使用中值滤波算法,可以在保护图像边缘同时去除处噪声,而均值滤波不能对图像边缘保护,如图1,2,3,4,5所示。 对于椒盐噪声,中值滤波能在去除噪声的同时较好的保持图像边缘,而均值滤波效果不佳。如图6,7,8所示。 原图像均值与中值滤波流程图 图1 原图像 图2 3*3均值滤波 图3

25、3*3中值滤波 图4 5*5均值滤波 图5 5*5中值滤波 图6 添加椒盐噪声图像 图7 3*3均值滤波 图8 3*3中值滤波 三、边缘检测 (一)梯度算子(以Priwitt为例) 基本思想: 利用梯度幅值在边缘处达到极值检测边缘。该法不受施加运算方向限制,同时能获得边缘方向信息,定位精度高,但对噪声较为敏感。 主要代码: void CMyImageView::OnEdgePriwitt() { CMyImageDoc* pDoc = GetDocument(

26、); int lHeight=pDoc->m_pDib->m_lpBMIH->biHeight; int lWidth=pDoc->m_pDib->m_lpBMIH->biWidth; int lLineBytes=(lWidth+3)/4*4; unsigned char *lpSrc; unsigned char *lpDst; unsigned char *lpNewDib; lpNewDib=new unsigned char[lLineBytes*lHeight]; memcpy(lpNewDib,pDoc->m_pDib->m_lpImage,lLineBy

27、tes*lHeight); for (int i = 0; i m_pDib->m_lpImage + lLineBytes* (lHeight-1-i) ; lpDst = lpNewDib + lLineBytes* (lHeight-1-i) ; for (int j =0; j 0 && i0 && j

28、LineBytes-1)+1**(lpSrc-1)+*(lpSrc-lLineBytes-1) -*(lpSrc+lLineBytes+1)-1**(lpSrc+1)-*(lpSrc-lLineBytes+1); int tmp2=*(lpSrc+lLineBytes-1)+1**(lpSrc+lLineBytes)+*(lpSrc+lLineBytes+1) -*(lpSrc-lLineBytes-1)-1**(lpSrc-lLineBytes)-*(lpSrc-lLineBytes+1); *lpDst=min((*lpSrc+(unsigned

29、 char )(min( sqrt(float(tmp1*tmp1+tmp2*tmp2)),255))/2),255); } lpSrc++;lpDst++; } } memcpy(pDoc->m_pDib->m_lpImage,lpNewDib,lLineBytes*lHeight); Invalidate(true); MessageBox(L"Prewitt边缘提取"); } (二)Sobel算子 基本思想: Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息

30、边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。 主要代码:、 void CMyImageView::OnEdgeSobel() { CMyImageDoc* pDoc = GetDocument(); unsigned char* lpSrc; unsigned char* lpDst; unsigned char* lpNewDIBBits; lpNewDIBBits=new unsigned char [lLineBytes*lHeight]; if (lpNewDIBBits == NULL) { return ; }

31、 BeginWaitCursor(); lpSrc=(unsigned char *)pDoc->m_pDib->m_lpImage; memcpy( lpNewDIBBits,lpSrc, lLineBytes * lHeight); int pixel[8]; for (int i = 0; i <=lHeight; i ++) { lpDst = (unsigned char *)pDoc->m_pDib->m_lpImage + lLineBytes* (lHeight-1-i)-1; lpSrc =lpNewDIBBits + lLineBy

32、tes * (lHeight - 1 - i)-1; for (int j =0; j 0 && i0 && j

33、); pixel[4] = (int)*(lpSrc+1); pixel[5] = (int)*(lpSrc - lLineBytes-1); pixel[6] = (int)*(lpSrc - lLineBytes); pixel[7] = (int)*(lpSrc - lLineBytes+1); int tmp1=pixel[0]+2*pixel[1]+pixel[2]-pixel[5]-2*pixel[6]-pixel[7]; int tmp2=pixel[2]+2*pixel[4]+pixel[7]-pixel[0]-2*p

34、ixel[3]-pixel[5]; int result =(int)(sqrt(double(tmp1*tmp1+tmp2*tmp2))/2+0.5);//>>255 if(result>255) result=255; *lpDst = (unsigned char)result; *lpDst&=0xfc; if(tmp2==0) tmp2=1; double tha=atan((double(tmp1))/tmp2); if(abs(tha)

35、tha>Pi/8 && tha-Pi*3/8) *lpDst=*lpDst+3; else *lpDst=*lpDst+2; }else *lpDst=0; } } CString str=pDoc->GetTitle(); pDoc->SetTitle(str+L"--Sobel"); InvalidateRect(CRect(0,0,lHeight,lW

36、idth),true); EndWaitCursor(); delete []lpNewDIBBits; MessageBox(L"Sobel 边缘提取"); } (三)拉普拉斯算子 基本思想: Laplace算子是二阶微分算子,利用边缘点处二阶导函数出现零交叉原理检测边缘。不具方向性,对灰度突变敏感,定位精度高,同时对噪声敏感,且不能获得边缘方向等信息。 主要代码: void CMyImageView::OnEdgeLaplace() { CMyImageDoc* pDoc = GetDocument(); unsigned char* lpSrc; u

37、nsigned char* lpDst; unsigned char* lpNewDIBBits; lpNewDIBBits=new unsigned char [lLineBytes*lHeight]; if (lpNewDIBBits == NULL) { return ; } BeginWaitCursor(); lpSrc=(unsigned char *)pDoc->m_pDib->m_lpImage; memcpy( lpNewDIBBits,lpSrc, lLineBytes * lHeight); int pixel[8]; for

38、 (int i = 0; i <=lHeight; i ++) { lpDst = (unsigned char *)pDoc->m_pDib->m_lpImage + lLineBytes* (lHeight-1-i)-1; lpSrc =lpNewDIBBits + lLineBytes * (lHeight - 1 - i)-1; for (int j =0; j 0 && i0 && j

39、 pixel[0] = (int)*(lpSrc+lLineBytes-1); pixel[1] = (int)*(lpSrc+lLineBytes); pixel[2] = (int)*(lpSrc+lLineBytes+1); pixel[3] = (int)*(lpSrc-1); pixel[4] = (int)*(lpSrc+1); pixel[5] = (int)*(lpSrc - lLineBytes-1); pixel[6] = (int)*(lpSrc - lLineBytes); pixel[7] =

40、 (int)*(lpSrc - lLineBytes+1); int Tmp=0; for(int k=0;k<8;k++) Tmp+=pixel[k]; Tmp=8**lpSrc-Tmp; Tmp+=128; if(Tmp>255) Tmp=255; if(Tmp<0) Tmp=0; *lpDst=Tmp; } else *lpDst=128; } } CString str=pDoc->GetTitle(); pDoc->SetTitle(str+L"--Laplace"); Invalidate

41、Rect(CRect(0,0,lHeight,lWidth),true); EndWaitCursor(); delete []lpNewDIBBits; MessageBox(L"Laplace 边缘提取"); } (四)运行结果及分析 由图1-4可知,前两种算子的检测结果基本相同,而拉普拉斯算子能提取对比度弱的边缘,边缘定位精确度高。 梯度算子得到的图像边缘更陡峭、清晰。Sobel算子具有平滑作用,能滤除一些噪声,去掉部分伪边缘,但同时也平滑了真正的边缘;定位精度不高。Laplace算子只能获得边缘位置信息,不能得到边缘的方向等信息。 图1 原图像

42、 图2 Prewitt边缘提取 图3 sobel边缘提取 图4 拉普拉斯边缘提取 四、固定阀值法、最大熵分割方法、最大类间方差法 (一)固定阈值分割 基本思想: 利用图像的灰度特征来选择一个最佳阈值,使前景和背景的两个灰度级分布的有效信息为最大。 主要代码: void CMyImageView::OnSegmentationMaxlikelihood() { CMyImageDoc* pDoc = GetDocument(); BeginWaitCursor(); i

43、nt lHistogram[256]={0}; GetHistgram(lHistogram,true); int meanBack,meanObj; int ABack,AObj; ABack=0; for (int i = 0; i < 256;i++) { if(ABack

44、255; while(lHistogram[maxH]10){ for (int i =pos ; i>=0 ;i--){ if(min>lHistogram[i]) min=lHistogram[i]; else { pos=i;break; } if(min<10)

45、 { pos=i;break; } } for (int i = pos; i >=0 ;i--){ if(AObj255) pos=255; if(meanBack<250){ for (int i = pos; i<256 ;i++){ if(min>

46、lHistogram[i]) min=lHistogram[i]; else { pos=i;break; } if(min<10) { pos=i;break; } } for (int i = pos; i <256 ;i++){ if(AObj

47、eanBack=meanObj; meanObj=tmp; int dtmp=ABack; ABack=AObj; AObj=dtmp; } TRACE("\nmeanBack=%d,(%d),meanObj=%d,(%d) posStep=%d\n\n",meanBack,ABack,meanObj,AObj,(maxH-minH)/3); double segmBack; pos=meanBack; bool bfind=false; if(meanBack>10){ while(pos>0 && !bfind){ pos--; dou

48、ble dtmp=((double)lHistogram[pos])/ABack; if(dtmp

49、图 else if(segmBack>meanObj-meanBack) segmBack=(meanObj-meanBack)/3; double segmObj; pos=meanObj; bfind=false; if(meanObj>255-10){ while(pos>0 && !bfind){ pos--; double dtmp=((double)lHistogram[pos])/AObj; if(dtmp

50、find){ pos++; double dtmp=((double)lHistogram[pos])/AObj; if(dtmpmeanObj-meanBack) segmObj=(meanObj-meanBack)/3; TRACE("\nmeanBack=%d,segmBack=%3.1f,meanObj=%d,segmObj=%3

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服