一段人脸识别的代码
来源:互联网 发布:c语言isnan 编辑:程序博客网 时间:2024/06/05 02:44
<DIV class=dp-highlighter><DIV class=bar></DIV>
<OL class=dp-cpp>
<LI class=alt><SPAN><SPAN class=preprocessor>#include "stdafx.h" </SPAN><SPAN> </SPAN></SPAN></LI>
<LI><SPAN></SPAN><SPAN class=preprocessor>#include "cv.h" </SPAN><SPAN> </SPAN></SPAN></LI>
<LI class=alt><SPAN></SPAN><SPAN class=preprocessor>#include "highgui.h" </SPAN><SPAN> </SPAN></SPAN></LI>
<LI><SPAN></SPAN><SPAN class=preprocessor>#include <stdlib.h> </SPAN><SPAN> </SPAN></SPAN></LI>
<LI class=alt><SPAN></SPAN><SPAN class=preprocessor>#include <string.h> </SPAN><SPAN> </SPAN></SPAN></LI>
<LI><SPAN></SPAN><SPAN class=preprocessor>#include <assert.h> </SPAN><SPAN> </SPAN></SPAN></LI>
<LI class=alt><SPAN></SPAN><SPAN class=preprocessor>#include <math.h> </SPAN><SPAN> </SPAN></SPAN></LI>
<LI><SPAN></SPAN><SPAN class=preprocessor>#include <float.h> </SPAN><SPAN> </SPAN></SPAN></LI>
<LI class=alt><SPAN></SPAN><SPAN class=preprocessor>#include <limits.h> </SPAN><SPAN> </SPAN></SPAN></LI>
<LI><SPAN></SPAN><SPAN class=preprocessor>#include <time.h> </SPAN><SPAN> </SPAN></SPAN></LI>
<LI class=alt><SPAN></SPAN><SPAN class=preprocessor>#include <ctype.h> </SPAN><SPAN> </SPAN></SPAN></LI>
<LI><SPAN> </SPAN></LI>
<LI class=alt><SPAN></SPAN><SPAN class=keyword>using</SPAN><SPAN> </SPAN><SPAN class=keyword>namespace</SPAN><SPAN> std; </SPAN></SPAN></LI>
<LI><SPAN> </SPAN></LI>
<LI class=alt><SPAN></SPAN><SPAN class=keyword>static</SPAN><SPAN> CvMemStorage* storage = 0; </SPAN></SPAN></LI>
<LI><SPAN></SPAN><SPAN class=keyword>static</SPAN><SPAN> CvHaarClassifierCascade* cascade = 0; </SPAN></SPAN></LI>
<LI class=alt><SPAN> </SPAN></LI>
<LI><SPAN></SPAN><SPAN class=keyword>const</SPAN><SPAN> </SPAN><SPAN class=datatypes>char</SPAN><SPAN>* cascade_name = </SPAN><SPAN class=string>"C:\\OpenCV2.2\\data\\haarcascades\\haarcascade_frontalface_alt2.xml"</SPAN><SPAN>; </SPAN></SPAN></LI>
<LI class=alt><SPAN> </SPAN></LI>
<LI><SPAN></SPAN><SPAN class=keyword>void</SPAN><SPAN> detect_and_draw(IplImage *img) </SPAN></SPAN></LI>
<LI class=alt><SPAN>{ </SPAN></LI>
<LI><SPAN> </SPAN><SPAN class=comment>//圆圈的颜色 </SPAN><SPAN> </SPAN></SPAN></LI>
<LI class=alt><SPAN> </SPAN><SPAN class=keyword>static</SPAN><SPAN> CvScalar colors[] = </SPAN></SPAN></LI>
<LI><SPAN> { </SPAN></LI>
<LI class=alt><SPAN> {{0,0,255}}, </SPAN></LI>
<LI><SPAN> {{0,128,255}}, </SPAN></LI>
<LI class=alt><SPAN> {{0,255,255}}, </SPAN></LI>
<LI><SPAN> {{0,255,0}}, </SPAN></LI>
<LI class=alt><SPAN> {{255,128,0}}, </SPAN></LI>
<LI><SPAN> {{255,255,0}}, </SPAN></LI>
<LI class=alt><SPAN> {{255,0,0}}, </SPAN></LI>
<LI><SPAN> {{255,0,255}} </SPAN></LI>
<LI class=alt><SPAN> }; </SPAN></LI>
<LI><SPAN> </SPAN></LI>
<LI class=alt><SPAN> </SPAN><SPAN class=datatypes>double</SPAN><SPAN> scale = 1.3; </SPAN></SPAN></LI>
<LI><SPAN> IplImage* gray = cvCreateImage( cvSize(img->width,img->height), 8, 1 ); </SPAN></LI>
<LI class=alt><SPAN> IplImage* small_img = cvCreateImage( cvSize( cvRound (img->width/scale), </SPAN></LI>
<LI><SPAN> cvRound (img->height/scale)), </SPAN></LI>
<LI class=alt><SPAN> 8, 1 ); </SPAN></LI>
<LI><SPAN> </SPAN><SPAN class=datatypes>int</SPAN><SPAN> i; </SPAN></SPAN></LI>
<LI class=alt><SPAN> </SPAN></LI>
<LI><SPAN> cvCvtColor( img, gray, CV_BGR2GRAY ); </SPAN></LI>
<LI class=alt><SPAN> cvResize( gray, small_img, CV_INTER_LINEAR ); </SPAN></LI>
<LI><SPAN> cvEqualizeHist( small_img, small_img ); </SPAN></LI>
<LI class=alt><SPAN> cvClearMemStorage( storage ); </SPAN></LI>
<LI><SPAN> </SPAN></LI>
<LI class=alt><SPAN> </SPAN><SPAN class=keyword>if</SPAN><SPAN>( cascade ) </SPAN></SPAN></LI>
<LI><SPAN> { </SPAN></LI>
<LI class=alt><SPAN> </SPAN><SPAN class=datatypes>double</SPAN><SPAN> t = (</SPAN><SPAN class=datatypes>double</SPAN><SPAN>)cvGetTickCount(); </SPAN></SPAN></LI>
<LI><SPAN> CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage, 1.1, 2, 0, cvSize(30, 30) ); </SPAN></LI>
<LI class=alt><SPAN> t = (</SPAN><SPAN class=datatypes>double</SPAN><SPAN>)cvGetTickCount() - t; </SPAN></SPAN></LI>
<LI><SPAN> printf( </SPAN><SPAN class=string>"detection time = %gms/n"</SPAN><SPAN>, t/((</SPAN><SPAN class=datatypes>double</SPAN><SPAN>)cvGetTickFrequency()*1000.) ); </SPAN></SPAN></LI>
<LI class=alt><SPAN> </SPAN><SPAN class=keyword>for</SPAN><SPAN>( i = 0; i < (faces ? faces->total : 0); i++ ) </SPAN></SPAN></LI>
<LI><SPAN> { </SPAN></LI>
<LI class=alt><SPAN> CvRect* r = (CvRect*)cvGetSeqElem( faces, i ); </SPAN></LI>
<LI><SPAN> CvPoint center; </SPAN></LI>
<LI class=alt><SPAN> </SPAN><SPAN class=datatypes>int</SPAN><SPAN> radius; </SPAN></SPAN></LI>
<LI><SPAN> center.x = cvRound((r->x + r->width*0.5)*scale); </SPAN></LI>
<LI class=alt><SPAN> center.y = cvRound((r->y + r->height*0.5)*scale); </SPAN></LI>
<LI><SPAN> radius = cvRound((r->width + r->height)*0.25*scale); </SPAN></LI>
<LI class=alt><SPAN> cvCircle( img, center, radius, colors[i%8], 3, 8, 0 ); </SPAN></LI>
<LI><SPAN> } </SPAN></LI>
<LI class=alt><SPAN> } </SPAN></LI>
<LI><SPAN> </SPAN></LI>
<LI class=alt><SPAN> cvShowImage( </SPAN><SPAN class=string>"result"</SPAN><SPAN>, img ); </SPAN></SPAN></LI>
<LI><SPAN> cvReleaseImage( &gray ); </SPAN></LI>
<LI class=alt><SPAN> cvReleaseImage( &small_img ); </SPAN></LI>
<LI><SPAN>} </SPAN></LI>
<LI class=alt><SPAN> </SPAN></LI>
<LI><SPAN> </SPAN></LI>
<LI class=alt><SPAN></SPAN><SPAN class=datatypes>int</SPAN><SPAN> _tmain(</SPAN><SPAN class=datatypes>int</SPAN><SPAN> argc, _TCHAR* argv[]) </SPAN></SPAN></LI>
<LI><SPAN>{ </SPAN></LI>
<LI class=alt><SPAN></SPAN><SPAN class=comment>/* </SPAN> </SPAN></LI>
<LI><SPAN><SPAN class=comment> IplImage *img=cvLoadImage("stuff.jpg"); </SPAN> </SPAN></LI>
<LI class=alt><SPAN><SPAN class=comment> cvNamedWindow("src",1); </SPAN> </SPAN></LI>
<LI><SPAN><SPAN class=comment> cvShowImage("src",img); </SPAN> </SPAN></LI>
<LI class=alt><SPAN><SPAN class=comment> cvWaitKey(0); </SPAN> </SPAN></LI>
<LI><SPAN><SPAN class=comment>*/</SPAN><SPAN> </SPAN></SPAN></LI>
<LI class=alt><SPAN> </SPAN></LI>
<LI><SPAN> </SPAN><SPAN class=keyword>const</SPAN><SPAN> </SPAN><SPAN class=datatypes>char</SPAN><SPAN>* filename = </SPAN><SPAN class=string>"stuff.jpg"</SPAN><SPAN>; </SPAN></SPAN></LI>
<LI class=alt><SPAN> IplImage* image = cvLoadImage(filename ); </SPAN></LI>
<LI><SPAN> cascade = (CvHaarClassifierCascade *)cvLoad( </SPAN><SPAN class=string>"C:\\OpenCV2.2\\data\\haarcascades\\haarcascade_frontalface_alt.xml"</SPAN><SPAN>); </SPAN></SPAN></LI>
<LI class=alt><SPAN> </SPAN></LI>
<LI><SPAN> </SPAN><SPAN class=keyword>if</SPAN><SPAN>( !cascade ) </SPAN></SPAN></LI>
<LI class=alt><SPAN> { </SPAN></LI>
<LI><SPAN> fprintf( stderr, </SPAN><SPAN class=string>"ERROR: Could not load classifier cascade/n"</SPAN><SPAN> ); </SPAN></SPAN></LI>
<LI class=alt><SPAN> </SPAN><SPAN class=keyword>return</SPAN><SPAN> -1; </SPAN></SPAN></LI>
<LI><SPAN> } </SPAN></LI>
<LI class=alt><SPAN> </SPAN></LI>
<LI><SPAN> storage = cvCreateMemStorage(0); </SPAN></LI>
<LI class=alt><SPAN> cvNamedWindow( </SPAN><SPAN class=string>"result"</SPAN><SPAN>, 1 ); </SPAN></SPAN></LI>
<LI><SPAN> </SPAN></LI>
<LI class=alt><SPAN> </SPAN><SPAN class=keyword>if</SPAN><SPAN>( image ) </SPAN></SPAN></LI>
<LI><SPAN> { </SPAN></LI>
<LI class=alt><SPAN> detect_and_draw(image); </SPAN></LI>
<LI><SPAN> cvWaitKey(0); </SPAN></LI>
<LI class=alt><SPAN> cvReleaseImage( &image ); </SPAN></LI>
<LI><SPAN> } </SPAN></LI>
<LI class=alt><SPAN> </SPAN></LI>
<LI><SPAN> cvDestroyWindow(</SPAN><SPAN class=string>"result"</SPAN><SPAN>); </SPAN></SPAN></LI>
<LI class=alt><SPAN> cvWaitKey(0); </SPAN></LI>
<LI><SPAN> </SPAN><SPAN class=keyword>return</SPAN><SPAN> 0; </SPAN></SPAN></LI>
<LI class=alt><SPAN>} </SPAN></LI></OL></DIV>
<OL class=dp-cpp>
<LI class=alt><SPAN><SPAN class=preprocessor>#include "stdafx.h" </SPAN><SPAN> </SPAN></SPAN></LI>
<LI><SPAN></SPAN><SPAN class=preprocessor>#include "cv.h" </SPAN><SPAN> </SPAN></SPAN></LI>
<LI class=alt><SPAN></SPAN><SPAN class=preprocessor>#include "highgui.h" </SPAN><SPAN> </SPAN></SPAN></LI>
<LI><SPAN></SPAN><SPAN class=preprocessor>#include <stdlib.h> </SPAN><SPAN> </SPAN></SPAN></LI>
<LI class=alt><SPAN></SPAN><SPAN class=preprocessor>#include <string.h> </SPAN><SPAN> </SPAN></SPAN></LI>
<LI><SPAN></SPAN><SPAN class=preprocessor>#include <assert.h> </SPAN><SPAN> </SPAN></SPAN></LI>
<LI class=alt><SPAN></SPAN><SPAN class=preprocessor>#include <math.h> </SPAN><SPAN> </SPAN></SPAN></LI>
<LI><SPAN></SPAN><SPAN class=preprocessor>#include <float.h> </SPAN><SPAN> </SPAN></SPAN></LI>
<LI class=alt><SPAN></SPAN><SPAN class=preprocessor>#include <limits.h> </SPAN><SPAN> </SPAN></SPAN></LI>
<LI><SPAN></SPAN><SPAN class=preprocessor>#include <time.h> </SPAN><SPAN> </SPAN></SPAN></LI>
<LI class=alt><SPAN></SPAN><SPAN class=preprocessor>#include <ctype.h> </SPAN><SPAN> </SPAN></SPAN></LI>
<LI><SPAN> </SPAN></LI>
<LI class=alt><SPAN></SPAN><SPAN class=keyword>using</SPAN><SPAN> </SPAN><SPAN class=keyword>namespace</SPAN><SPAN> std; </SPAN></SPAN></LI>
<LI><SPAN> </SPAN></LI>
<LI class=alt><SPAN></SPAN><SPAN class=keyword>static</SPAN><SPAN> CvMemStorage* storage = 0; </SPAN></SPAN></LI>
<LI><SPAN></SPAN><SPAN class=keyword>static</SPAN><SPAN> CvHaarClassifierCascade* cascade = 0; </SPAN></SPAN></LI>
<LI class=alt><SPAN> </SPAN></LI>
<LI><SPAN></SPAN><SPAN class=keyword>const</SPAN><SPAN> </SPAN><SPAN class=datatypes>char</SPAN><SPAN>* cascade_name = </SPAN><SPAN class=string>"C:\\OpenCV2.2\\data\\haarcascades\\haarcascade_frontalface_alt2.xml"</SPAN><SPAN>; </SPAN></SPAN></LI>
<LI class=alt><SPAN> </SPAN></LI>
<LI><SPAN></SPAN><SPAN class=keyword>void</SPAN><SPAN> detect_and_draw(IplImage *img) </SPAN></SPAN></LI>
<LI class=alt><SPAN>{ </SPAN></LI>
<LI><SPAN> </SPAN><SPAN class=comment>//圆圈的颜色 </SPAN><SPAN> </SPAN></SPAN></LI>
<LI class=alt><SPAN> </SPAN><SPAN class=keyword>static</SPAN><SPAN> CvScalar colors[] = </SPAN></SPAN></LI>
<LI><SPAN> { </SPAN></LI>
<LI class=alt><SPAN> {{0,0,255}}, </SPAN></LI>
<LI><SPAN> {{0,128,255}}, </SPAN></LI>
<LI class=alt><SPAN> {{0,255,255}}, </SPAN></LI>
<LI><SPAN> {{0,255,0}}, </SPAN></LI>
<LI class=alt><SPAN> {{255,128,0}}, </SPAN></LI>
<LI><SPAN> {{255,255,0}}, </SPAN></LI>
<LI class=alt><SPAN> {{255,0,0}}, </SPAN></LI>
<LI><SPAN> {{255,0,255}} </SPAN></LI>
<LI class=alt><SPAN> }; </SPAN></LI>
<LI><SPAN> </SPAN></LI>
<LI class=alt><SPAN> </SPAN><SPAN class=datatypes>double</SPAN><SPAN> scale = 1.3; </SPAN></SPAN></LI>
<LI><SPAN> IplImage* gray = cvCreateImage( cvSize(img->width,img->height), 8, 1 ); </SPAN></LI>
<LI class=alt><SPAN> IplImage* small_img = cvCreateImage( cvSize( cvRound (img->width/scale), </SPAN></LI>
<LI><SPAN> cvRound (img->height/scale)), </SPAN></LI>
<LI class=alt><SPAN> 8, 1 ); </SPAN></LI>
<LI><SPAN> </SPAN><SPAN class=datatypes>int</SPAN><SPAN> i; </SPAN></SPAN></LI>
<LI class=alt><SPAN> </SPAN></LI>
<LI><SPAN> cvCvtColor( img, gray, CV_BGR2GRAY ); </SPAN></LI>
<LI class=alt><SPAN> cvResize( gray, small_img, CV_INTER_LINEAR ); </SPAN></LI>
<LI><SPAN> cvEqualizeHist( small_img, small_img ); </SPAN></LI>
<LI class=alt><SPAN> cvClearMemStorage( storage ); </SPAN></LI>
<LI><SPAN> </SPAN></LI>
<LI class=alt><SPAN> </SPAN><SPAN class=keyword>if</SPAN><SPAN>( cascade ) </SPAN></SPAN></LI>
<LI><SPAN> { </SPAN></LI>
<LI class=alt><SPAN> </SPAN><SPAN class=datatypes>double</SPAN><SPAN> t = (</SPAN><SPAN class=datatypes>double</SPAN><SPAN>)cvGetTickCount(); </SPAN></SPAN></LI>
<LI><SPAN> CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage, 1.1, 2, 0, cvSize(30, 30) ); </SPAN></LI>
<LI class=alt><SPAN> t = (</SPAN><SPAN class=datatypes>double</SPAN><SPAN>)cvGetTickCount() - t; </SPAN></SPAN></LI>
<LI><SPAN> printf( </SPAN><SPAN class=string>"detection time = %gms/n"</SPAN><SPAN>, t/((</SPAN><SPAN class=datatypes>double</SPAN><SPAN>)cvGetTickFrequency()*1000.) ); </SPAN></SPAN></LI>
<LI class=alt><SPAN> </SPAN><SPAN class=keyword>for</SPAN><SPAN>( i = 0; i < (faces ? faces->total : 0); i++ ) </SPAN></SPAN></LI>
<LI><SPAN> { </SPAN></LI>
<LI class=alt><SPAN> CvRect* r = (CvRect*)cvGetSeqElem( faces, i ); </SPAN></LI>
<LI><SPAN> CvPoint center; </SPAN></LI>
<LI class=alt><SPAN> </SPAN><SPAN class=datatypes>int</SPAN><SPAN> radius; </SPAN></SPAN></LI>
<LI><SPAN> center.x = cvRound((r->x + r->width*0.5)*scale); </SPAN></LI>
<LI class=alt><SPAN> center.y = cvRound((r->y + r->height*0.5)*scale); </SPAN></LI>
<LI><SPAN> radius = cvRound((r->width + r->height)*0.25*scale); </SPAN></LI>
<LI class=alt><SPAN> cvCircle( img, center, radius, colors[i%8], 3, 8, 0 ); </SPAN></LI>
<LI><SPAN> } </SPAN></LI>
<LI class=alt><SPAN> } </SPAN></LI>
<LI><SPAN> </SPAN></LI>
<LI class=alt><SPAN> cvShowImage( </SPAN><SPAN class=string>"result"</SPAN><SPAN>, img ); </SPAN></SPAN></LI>
<LI><SPAN> cvReleaseImage( &gray ); </SPAN></LI>
<LI class=alt><SPAN> cvReleaseImage( &small_img ); </SPAN></LI>
<LI><SPAN>} </SPAN></LI>
<LI class=alt><SPAN> </SPAN></LI>
<LI><SPAN> </SPAN></LI>
<LI class=alt><SPAN></SPAN><SPAN class=datatypes>int</SPAN><SPAN> _tmain(</SPAN><SPAN class=datatypes>int</SPAN><SPAN> argc, _TCHAR* argv[]) </SPAN></SPAN></LI>
<LI><SPAN>{ </SPAN></LI>
<LI class=alt><SPAN></SPAN><SPAN class=comment>/* </SPAN> </SPAN></LI>
<LI><SPAN><SPAN class=comment> IplImage *img=cvLoadImage("stuff.jpg"); </SPAN> </SPAN></LI>
<LI class=alt><SPAN><SPAN class=comment> cvNamedWindow("src",1); </SPAN> </SPAN></LI>
<LI><SPAN><SPAN class=comment> cvShowImage("src",img); </SPAN> </SPAN></LI>
<LI class=alt><SPAN><SPAN class=comment> cvWaitKey(0); </SPAN> </SPAN></LI>
<LI><SPAN><SPAN class=comment>*/</SPAN><SPAN> </SPAN></SPAN></LI>
<LI class=alt><SPAN> </SPAN></LI>
<LI><SPAN> </SPAN><SPAN class=keyword>const</SPAN><SPAN> </SPAN><SPAN class=datatypes>char</SPAN><SPAN>* filename = </SPAN><SPAN class=string>"stuff.jpg"</SPAN><SPAN>; </SPAN></SPAN></LI>
<LI class=alt><SPAN> IplImage* image = cvLoadImage(filename ); </SPAN></LI>
<LI><SPAN> cascade = (CvHaarClassifierCascade *)cvLoad( </SPAN><SPAN class=string>"C:\\OpenCV2.2\\data\\haarcascades\\haarcascade_frontalface_alt.xml"</SPAN><SPAN>); </SPAN></SPAN></LI>
<LI class=alt><SPAN> </SPAN></LI>
<LI><SPAN> </SPAN><SPAN class=keyword>if</SPAN><SPAN>( !cascade ) </SPAN></SPAN></LI>
<LI class=alt><SPAN> { </SPAN></LI>
<LI><SPAN> fprintf( stderr, </SPAN><SPAN class=string>"ERROR: Could not load classifier cascade/n"</SPAN><SPAN> ); </SPAN></SPAN></LI>
<LI class=alt><SPAN> </SPAN><SPAN class=keyword>return</SPAN><SPAN> -1; </SPAN></SPAN></LI>
<LI><SPAN> } </SPAN></LI>
<LI class=alt><SPAN> </SPAN></LI>
<LI><SPAN> storage = cvCreateMemStorage(0); </SPAN></LI>
<LI class=alt><SPAN> cvNamedWindow( </SPAN><SPAN class=string>"result"</SPAN><SPAN>, 1 ); </SPAN></SPAN></LI>
<LI><SPAN> </SPAN></LI>
<LI class=alt><SPAN> </SPAN><SPAN class=keyword>if</SPAN><SPAN>( image ) </SPAN></SPAN></LI>
<LI><SPAN> { </SPAN></LI>
<LI class=alt><SPAN> detect_and_draw(image); </SPAN></LI>
<LI><SPAN> cvWaitKey(0); </SPAN></LI>
<LI class=alt><SPAN> cvReleaseImage( &image ); </SPAN></LI>
<LI><SPAN> } </SPAN></LI>
<LI class=alt><SPAN> </SPAN></LI>
<LI><SPAN> cvDestroyWindow(</SPAN><SPAN class=string>"result"</SPAN><SPAN>); </SPAN></SPAN></LI>
<LI class=alt><SPAN> cvWaitKey(0); </SPAN></LI>
<LI><SPAN> </SPAN><SPAN class=keyword>return</SPAN><SPAN> 0; </SPAN></SPAN></LI>
<LI class=alt><SPAN>} </SPAN></LI></OL></DIV>
- 一段人脸识别的代码
- 人脸识别的代码
- 人脸识别的代码
- [java]让人尴尬的一段代码
- 一段不是人看的代码
- 一段不可思议的代码
- 一段写晕掉的代码
- 一段好玩的代码
- 一段有趣的代码
- 一段漏洞百出的代码
- 一段弃暗投明的代码
- treeview的一段代码
- 一段分页的代码
- 一段简单的代码
- 一段smc的代码
- 一段好的代码
- CRM_ORDER_READ 的一段代码
- 一段ITEMCHANGED的代码
- Mysql设置某字段唯一
- IE6和Firefox同时支持PNG透明图片的方法
- 第十三周上机任务项目2-二进制转换
- Unix操作系统优势所在
- Asp.Net超大文件上传
- 一段人脸识别的代码
- linux网络编程
- [转载]Windows下svn服务器的安装
- VC 2010 使用GSOAP调用C#写的WEBSERVICE
- TortoiseHg的使用
- Fibnacci序列(2)
- CommJs-Packages/1.0
- QT生成在Windows下有图标的exe文件(IDE=QT Creator)
- 为什么我们要每天担心网站收录不稳定?