当前位置: 首页 > news >正文

东莞58同城做网站电话wordpress进入站点

东莞58同城做网站电话,wordpress进入站点,能连接wordpress的app,摄影网站模板源码文章目录 OpenCV学习报告读取图片和网络摄像头1.1 图片读取1.2 视频读取1.1.1 读取视频文件1.1.2读取网络摄像头 OpenCV基础功能调整、裁剪图像3.1 调整图像大小3.2 裁剪图像 图像上绘制形状和文本4.1 图像上绘制形状4.2图像上写文字 透视变换图像拼接颜色检测轮廓检测人脸检测… 文章目录 OpenCV学习报告读取图片和网络摄像头1.1 图片读取1.2 视频读取1.1.1 读取视频文件1.1.2读取网络摄像头 OpenCV基础功能调整、裁剪图像3.1 调整图像大小3.2 裁剪图像 图像上绘制形状和文本4.1 图像上绘制形状4.2图像上写文字 透视变换图像拼接颜色检测轮廓检测人脸检测9.1静态图片9.2 摄像头 实战10.1虚拟绘画10.2纸张扫描10.3 车牌检测器 参考资料 OpenCV学习报告 读取图片和网络摄像头 1.1 图片读取 import cv2 # read image img cv2.imread(Resources/dnn.jpg) cv2.imshow(Output,img) cv2.waitKey(0)1.2 视频读取 1.1.1 读取视频文件 import cv2 # read video cap cv2.VideoCapture(Resources/test_video.mp4) while True:success,img cap.read()cv2.imshow(Video,img)if cv2.waitKey(1) 0xFF ord(q):break1.1.2读取网络摄像头 import cv2 # read webcam cap cv2.VideoCapture(0) cap.set(3,640) #width cap.set(4,480) #height cap.set(10,100)while True:success,img cap.read()cv2.imshow(Video,img)if cv2.waitKey(1) 0xFF ord(q):break OpenCV基础功能 import cv2 import numpy as np # basic function img cv2.imread(Resources/dnn.jpg) kernel np.ones((5,5),np.uint8)# 灰度转换 imgGray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 图像模糊 imgBlur cv2.GaussianBlur(imgGray,(7,7),0) # 边缘检测 imgCanny cv2.Canny(img,100,100) # 膨胀 imgDialation cv2.dilate(imgCanny, kernel,iterations1) # 腐蚀 imgEroded cv2.erode(imgDialation,kernel,iterations1)# cv2.imshow(Output,img) cv2.imshow(Gray Image,imgGray) cv2.imshow(Blur Image,imgBlur) cv2.imshow(Blur Image,imgCanny) cv2.imshow(Dialation Image,imgDialation) cv2.imshow(Eroded Image,imgEroded)cv2.waitKey(0)调整、裁剪图像 3.1 调整图像大小 import cv2# resize imageimg cv2.imread(Resources/lambo.PNG) print(img.shape)imgResize cv2.resize(img,(300,200)) print(imgResize.shape)cv2.imshow(Image,img) cv2.imshow(Image Resize,imgResize)cv2.waitKey(0)3.2 裁剪图像 import cv2imgcv2.imread(Resources/lambo.PNG) cv2.imshow(image,img)print(img.shape)#height,width,dpthcrop_imgimg[100:400,50:500] cv2.imshow(crop image,crop_img)cv2.waitKey(0) 图像上绘制形状和文本 4.1 图像上绘制形状 import cv2 import numpy as np # shapes and texts img np.zeros((512,512,3),np.uint8) cv2.imshow(oringin image,img)cv2.line(img,(0,0),(img.shape[1],img.shape[0]),(0,255,0),3) cv2.imshow(line image,img)cv2.rectangle(img,(0,0),(250,350),(0,0,255),2) cv2.imshow(rectangle image,img)cv2.circle(img,(400,500),30,(255,255,0),5) cv2.imshow(circle image,img)cv2.waitKey(0)4.2图像上写文字 import cv2 import numpy as npimg np.zeros((512,512,3),np.uint8) cv2.imshow(oringin image,img)cv2.putText(img,OPENCV,(300,200),cv2.FONT_HERSHEY_COMPLEX,1,(0,150,0),1) cv2.imshow(putText01 Image,img) cv2.putText(img,I LOVE XD,(100,300),cv2.FONT_HERSHEY_COMPLEX,1,(0,150,0),1) cv2.imshow(putText02 Image,img)cv2.waitKey(0)透视变换 import cv2 import numpy as np # warp perspective img cv2.imread(Resources/cards.jpg)width,height 250,350 pts1 np.float32([[111,219],[287,188],[154,482],[352,440]]) pts2 np.float32([[0,0],[width,0],[0,height],[width,height]]) matrix cv2.getPerspectiveTransform(pts1,pts2) imgOutput cv2.warpPerspective(img,matrix,(width,height))cv2.imshow(Image,img) cv2.imshow(Output,imgOutput)cv2.waitKey(0) 图像拼接 import cv2 import numpy as np # join images def stackImages(scale,imgArray):rows len(imgArray)cols len(imgArray[0])rowsAvailable isinstance(imgArray[0], list)width imgArray[0][0].shape[1]height imgArray[0][0].shape[0]if rowsAvailable:for x in range ( 0, rows):for y in range(0, cols):if imgArray[x][y].shape[:2] imgArray[0][0].shape [:2]:imgArray[x][y] cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)else:imgArray[x][y] cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]), None, scale, scale)if len(imgArray[x][y].shape) 2: imgArray[x][y] cv2.cvtColor( imgArray[x][y], cv2.COLOR_GRAY2BGR)imageBlank np.zeros((height, width, 3), np.uint8)hor [imageBlank]*rowshor_con [imageBlank]*rowsfor x in range(0, rows):hor[x] np.hstack(imgArray[x])ver np.vstack(hor)else:for x in range(0, rows):if imgArray[x].shape[:2] imgArray[0].shape[:2]:imgArray[x] cv2.resize(imgArray[x], (0, 0), None, scale, scale)else:imgArray[x] cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None,scale, scale)if len(imgArray[x].shape) 2: imgArray[x] cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)hor np.hstack(imgArray)ver horreturn verimg cv2.imread(Resources/dnn.jpg) imgGray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)imgStack stackImages(0.5,([img,imgGray,img],[img,img,img]))# imgHdr np.hstack((img,img)) # imgVer np.vstack((img,img)) # cv2.imshow(Horizontal,imgHdr) # cv2.imshow(Vertical,imgVer)cv2.imshow(ImageStack,imgStack)cv2.waitKey(0)颜色检测 import cv2 import numpy as np # color dectiondef empty(a):pass 连接图片 def stackImages(scale,imgArray):rows len(imgArray)cols len(imgArray[0])rowsAvailable isinstance(imgArray[0], list)width imgArray[0][0].shape[1]height imgArray[0][0].shape[0]if rowsAvailable:for x in range ( 0, rows):for y in range(0, cols):if imgArray[x][y].shape[:2] imgArray[0][0].shape [:2]:imgArray[x][y] cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)else:imgArray[x][y] cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]), None, scale, scale)if len(imgArray[x][y].shape) 2: imgArray[x][y] cv2.cvtColor( imgArray[x][y], cv2.COLOR_GRAY2BGR)imageBlank np.zeros((height, width, 3), np.uint8)hor [imageBlank]*rowshor_con [imageBlank]*rowsfor x in range(0, rows):hor[x] np.hstack(imgArray[x])ver np.vstack(hor)else:for x in range(0, rows):if imgArray[x].shape[:2] imgArray[0].shape[:2]:imgArray[x] cv2.resize(imgArray[x], (0, 0), None, scale, scale)else:imgArray[x] cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None,scale, scale)if len(imgArray[x].shape) 2: imgArray[x] cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)hor np.hstack(imgArray)ver horreturn ver# 调整滑动条的位置来改变图像的颜色阈值从而实现对图像的颜色分割或过滤 path Resources/lambo.PNG framWidth 640 framHeight 480cap cv2.VideoCapture(path) cap.set(3,framWidth) #width cap.set(4,framHeight) #height cap.set(10,150)cv2.namedWindow(TrackBars) cv2.resizeWindow(TrackBars,640,240) cv2.createTrackbar(Hue Min,TrackBars,0,179,empty) # hue cv2.createTrackbar(Hue Max,TrackBars,179,179,empty) cv2.createTrackbar(Sat Min,TrackBars,0,255,empty) # saturation cv2.createTrackbar(Sat Max,TrackBars,255,255,empty) cv2.createTrackbar(Val Min,TrackBars,0,255,empty) # value cv2.createTrackbar(Val Max,TrackBars,255,255,empty)while True:img cv2.imread(path)imgHSV cv2.cvtColor(img,cv2.COLOR_BGR2HSV)h_min cv2.getTrackbarPos(Hue Min,TrackBars)h_max cv2.getTrackbarPos(Hue Max, TrackBars)s_min cv2.getTrackbarPos(Sat Min, TrackBars)s_max cv2.getTrackbarPos(Sat Max, TrackBars)v_min cv2.getTrackbarPos(Val Min, TrackBars)v_max cv2.getTrackbarPos(Val Max, TrackBars)# print(h_min,h_max,s_min,s_max,v_min,v_max)lower np.array([h_min,s_min,v_min])upper np.array([h_max,s_max,v_max])#用掩码对原始图像进行位运算mask cv2.inRange(imgHSV,lower,upper)imgResult cv2.bitwise_and(img,img,maskmask) #二值图像# cv2.imshow(Original,img)# cv2.imshow(HSV,imgHSV)# cv2.imshow(Mask, mask)# cv2.imshow(Result, imgResult)imgStack stackImages(0.6, ([img, imgHSV], [mask, imgResult]))cv2.imshow(Stacked Images, imgStack)cv2.waitKey(1)轮廓检测 import cv2 import numpy as np#contours / shape detectiondef stackImages(scale,imgArray):rows len(imgArray)cols len(imgArray[0])rowsAvailable isinstance(imgArray[0], list)width imgArray[0][0].shape[1]height imgArray[0][0].shape[0]if rowsAvailable:for x in range ( 0, rows):for y in range(0, cols):if imgArray[x][y].shape[:2] imgArray[0][0].shape [:2]:imgArray[x][y] cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)else:imgArray[x][y] cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]), None, scale, scale)if len(imgArray[x][y].shape) 2: imgArray[x][y] cv2.cvtColor( imgArray[x][y], cv2.COLOR_GRAY2BGR)imageBlank np.zeros((height, width, 3), np.uint8)hor [imageBlank]*rowshor_con [imageBlank]*rowsfor x in range(0, rows):hor[x] np.hstack(imgArray[x])ver np.vstack(hor)else:for x in range(0, rows):if imgArray[x].shape[:2] imgArray[0].shape[:2]:imgArray[x] cv2.resize(imgArray[x], (0, 0), None, scale, scale)else:imgArray[x] cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None,scale, scale)if len(imgArray[x].shape) 2: imgArray[x] cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)hor np.hstack(imgArray)ver horreturn verdef getContours(img):contours,hierarchy cv2.findContours(img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)for cnt in contours:area cv2.contourArea(cnt)print(area)if area500:cv2.drawContours(imgContour,cnt,-1,(255,0,0),3)#计算轮廓曲线长度peri cv2.arcLength(cnt,True)print(peri)approx cv2.approxPolyDP(cnt,0.02*peri,True)print(len(approx))objCor len(approx)x,y,w,h cv2.boundingRect(approx)# 图形分类if objCor 3: objectType Trielif objCor 4 :aspRatio w / float(h)if aspRatio 0.98 and aspRatio 1.03: objectType Squareelse: objectType Rectangleelif objCor 4: objectType Circleselse: objectType Nonecv2.rectangle(imgContour,(x,y),(xw,yh),(0,255,0),2)cv2.putText(imgContour,objectType,(x(w//2)-10,y(h//2)-10),cv2.FONT_HERSHEY_COMPLEX,0.7,(0,0,0),2)path Resources/shapes.png img cv2.imread(path) imgContour img.copy()imgGray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) imgBlur cv2.GaussianBlur(imgGray,(7,7),1) imgCanny cv2.Canny(imgBlur,50,50) getContours(imgCanny)imgBlank np.zeros_like(img) imgStack stackImages(0.8,([img,imgGray],[imgCanny,imgContour]))cv2.imshow(Stack,imgStack)cv2.waitKey(0) 人脸检测 9.1静态图片 import cv2 # face detection faceCascade cv2.CascadeClassifier(Resources/haarcascade_frontalface_default.xml) img cv2.imread(Resources/dnn.jpg) imgGray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)faces faceCascade.detectMultiScale(imgGray,1.1,4)for(x,y,w,h) in faces:cv2.rectangle(img,(x,y),(xw,yh),(255,0,0),2) cv2.imshow(Result,img)cv2.waitKey(0)9.2 摄像头 import cv2faceCascade cv2.CascadeClassifier(Resources/haarcascade_frontalface_default.xml)cap cv2.VideoCapture(0) cap.set(3,640) #width cap.set(4,480) #height cap.set(10,100)while True:success,img cap.read()cv2.imshow(Video,img)imgGray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)faces faceCascade.detectMultiScale(imgGray, 1.1, 4)for (x, y, w, h) in faces:cv2.rectangle(img, (x, y), (x w, y h), (255, 0, 0), 2)cv2.imshow(Result, img)if cv2.waitKey(1) 0xFF ord(q):break实战 10.1虚拟绘画 import cv2 import numpy as npframeWidth 640 frameHeight 480 cap cv2.VideoCapture(0) cap.set(3, frameWidth) cap.set(4, frameHeight) cap.set(10, 150)# 想要检测的颜色 myColors [[0,89,0,98,255,255], [0,47,0,97,255,255], [0,66,0,179,255,255], [0,54,0,98,255,255]] # 想要绘制的颜色 BGR myColorValues [[51, 153, 255],[0, 255, 0],[255,0,0],[0,255,255]] # 绘制的点的列表 myPoints [] ## [x , y , colorId ]获取想要绘制的及对应的颜色 def findColor(img, myColors, myColorValues):imgHSV cv2.cvtColor(img, cv2.COLOR_BGR2HSV)count 0newPoints []for color in myColors:lower np.array(color[0:3])upper np.array(color[3:6])mask cv2.inRange(imgHSV, lower, upper) x, y getContours(mask) # 想要绘制的点cv2.circle(imgResult, (x, y), 20, myColorValues[count], cv2.FILLED) # 将点绘制在图上if x ! 0 and y ! 0:newPoints.append([x, y, count]) # 将点添加到 newPoints列表中count为想要绘制颜色的编号count 1return newPoints def getContours(img):contours, Heriachy cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) x, y, w, h 0, 0, 0, 0for cnt in contours:area cv2.contourArea(cnt)if area 500:# cv2.drawContours(imgResult, cnt, -1, (255, 0, 0), 3)peri cv2.arcLength(cnt, True)approx cv2.approxPolyDP(cnt, 0.02 * peri, True)x, y, w, h cv2.boundingRect(approx) return x w // 2, y 把点绘制在画布上 def drawOnCanvas(myPoints, myColorValues):for point in myPoints:cv2.circle(imgResult, (point[0], point[1]), 20, myColorValues[point[2]], cv2.FILLED)while True:success, img cap.read()imgResult img.copy()newPoints findColor(img, myColors, myColorValues) # 想要绘制的点if len(newPoints) ! 0:for newP in newPoints:myPoints.append(newP)if len(myPoints) ! 0:drawOnCanvas(myPoints, myColorValues) # 将点绘制在画布上cv2.imshow(Result, imgResult)if cv2.waitKey(1) 0xFF ord(q):break 利用颜色检测滑杆来得出笔的颜色 10.2纸张扫描 import cv2 import numpy as npwidthImg480 heightImg 640img cv2.imread(Resources/1.jpg)图像预处理 def preProcessing(img):imgGray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)imgBlur cv2.GaussianBlur(imgGray,(5,5),1)imgCanny cv2.Canny(imgBlur,200,200)kernel np.ones((5,5))imgDial cv2.dilate(imgCanny,kernel,iterations2)imgThres cv2.erode(imgDial,kernel,iterations1)return imgThres获取最大轮廓角点 def getContours(img):biggest np.array([])maxArea 0contours,Heriachy cv2.findContours(img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)for cnt in contours:area cv2.contourArea(cnt)if area5000:peri cv2.arcLength(cnt,True)approx cv2.approxPolyDP(cnt,0.02*peri,True)if area maxArea and len(approx) 4:biggest approxmaxArea area#绘制轮廓biggest仅仅包含矩形的轮廓cv2.drawContours(imgContour, biggest, -1, (255, 0, 0), 20)return biggest矩形角点的重新处理按照一定的顺序排列左上右上左下右下 def reorder (myPoints):myPoints myPoints.reshape((4,2))#四个角点myPointsNew np.zeros((4,1,2),np.int32)#点按照一定的顺序重新排列add myPoints.sum(1)#将点进行xy计算myPointsNew[0] myPoints[np.argmin(add)] #和最小的点为左上角点myPointsNew[3] myPoints[np.argmax(add)]#和最大的点为右下角点diff np.diff(myPoints,axis1)#将点进行x-y差异计算myPointsNew[1] myPoints[np.argmin(diff)]#差异最小的点为右上myPointsNew[2] myPoints[np.argmax(diff)]#差异最大的点为左下return myPointsNew鸟瞰转换 def getWarp(img,biggest):#矩阵角点的处理按照一个统一顺序排列biggest reorder(biggest)pts1 np.float32(biggest)pts2 np.float32([[0, 0], [widthImg, 0], [0, heightImg], [widthImg, heightImg]])matrix cv2.getPerspectiveTransform(pts1, pts2)#鸟瞰图imgOutput cv2.warpPerspective(img, matrix, (widthImg, heightImg))#得到的鸟瞰图边缘有其他背景所以裁剪边缘并将裁剪后的图像重新调整为原来窗口大小。imgCropped imgOutput[20:imgOutput.shape[0]-20,20:imgOutput.shape[1]-20]imgCropped cv2.resize(imgCropped,(widthImg,heightImg))return imgCropped图像堆叠显示 def stackImages(scale,imgArray):rows len(imgArray)cols len(imgArray[0])rowsAvailable isinstance(imgArray[0], list)width imgArray[0][0].shape[1]height imgArray[0][0].shape[0]if rowsAvailable:for x in range ( 0, rows):for y in range(0, cols):if imgArray[x][y].shape[:2] imgArray[0][0].shape [:2]:imgArray[x][y] cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)else:imgArray[x][y] cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]), None, scale, scale)if len(imgArray[x][y].shape) 2: imgArray[x][y] cv2.cvtColor( imgArray[x][y], cv2.COLOR_GRAY2BGR)imageBlank np.zeros((height, width, 3), np.uint8)hor [imageBlank]*rowshor_con [imageBlank]*rowsfor x in range(0, rows):hor[x] np.hstack(imgArray[x])ver np.vstack(hor)else:for x in range(0, rows):if imgArray[x].shape[:2] imgArray[0].shape[:2]:imgArray[x] cv2.resize(imgArray[x], (0, 0), None, scale, scale)else:imgArray[x] cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None,scale, scale)if len(imgArray[x].shape) 2: imgArray[x] cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)hor np.hstack(imgArray)ver horreturn verwhile True:imgresize cv2.resize(img,(widthImg,heightImg))imgContour imgresize.copy()imgThres preProcessing(imgresize)biggest getContours(imgThres)if biggest.size ! 0:# 鸟瞰转换imgWarped getWarp(imgresize, biggest)imageArray ([imgresize,imgThres],[imgContour,imgWarped])cv2.imshow(ImageWarped, imgWarped)else:imageArray ([imgContour, img])# 图像堆叠显示stackedImages stackImages(0.5, imageArray)cv2.imshow(WorkFlow, stackedImages)cv2.waitKey(0) 10.3 车牌检测器 import cv2frameWidth 640 frameHeight 480 nPlateCascade cv2.CascadeClassifier(Resources/haarcascade_russian_plate_number.xml) minArea 200 color (255,0,255)cap cv2.VideoCapture(0) cap.set(3, frameWidth) cap.set(4, frameHeight) cap.set(10,150) count 0while True:success, img cap.read() imgGray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #车牌检测numberPlates nPlateCascade.detectMultiScale(imgGray, 1.1, 10)for (x, y, w, h) in numberPlates:area w*hif area minArea:#绘制矩形cv2.rectangle(img, (x, y), (x w, y h), (255, 0, 255), 2)#绘制文字cv2.putText(img,Number Plate,(x,y-5),cv2.FONT_HERSHEY_COMPLEX_SMALL,1,color,2)imgRoi img[y:yh,x:xw]cv2.imshow(ROI, imgRoi)cv2.imshow(Result, img)if cv2.waitKey(1) 0xFF ord(s):cv2.imwrite(Resources/Scanned/NoPlate_str(count).jpg,imgRoi)cv2.rectangle(img,(0,200),(640,300),(0,255,0),cv2.FILLED)cv2.putText(img,Scan Saved,(150,265),cv2.FONT_HERSHEY_DUPLEX,2,(0,0,255),2)cv2.imshow(Result,img)cv2.waitKey(500)count 1break按s键后可保存车牌 参考资料 ChatGPT (openai.com) RGB Color Codes Chart (rapidtables.com) 图像基本操作 - 【布客】OpenCV 4.0.0 中文翻译 (apachecn.org)
http://www.dnsts.com.cn/news/30087.html

相关文章:

  • 酒泉网站建设公司dw做的网站怎么让别人看到
  • 东莞便宜做网站中国企业网址大全
  • 网站标题写什么作用是什么意思网站设计的基本流程是什么
  • 网站维护费用明细可以左右滑动的网站
  • seo怎样才能优化网站青岛百度网站排名优化
  • 网站建设售价多少钱珠宝首饰网站模板
  • 黑龙江生产建设兵团网站高校网站群建设的公司有哪些
  • 东营seo整站优化电子商务网站开发与建设
  • 越秀区营销型网站建设小程序开发工具下载
  • 深圳市工商注册信息查询网站wordpress 站内链接
  • 网站么做淘宝客赚佣金网站建设模板网站
  • 网上做牙刷上什么网站最新新闻热点国家大事
  • 设计案例的网站鲜花店网站建设
  • 好创意网站有哪些方面网站建设证有
  • 杭州做网站的网络公司有哪些网站建设和网站优化哪个更重要
  • 公司网站升级改版方案网站开发建设总结
  • 免费申请自己的网站湛江网站建设公司
  • 网站设计任务深圳网域官网
  • 兼容性视图中显示所有网站浏览器代理怎么弄
  • 宁波网站建设培训唐山百度网站建设
  • 网站怎样绑定域名访问乐清房产在线网
  • 网站泛目录怎么做天津网站建设揭秘
  • 安徽网站建设哪家好郑州seo技术博客
  • ai设计网站24小时在线观看视频直播
  • 南京建设局的网站可以做推广的平台
  • 怎样可以做网站手机网站开发工具
  • 域名备案关闭网站seo是什么服务
  • 东莞哪家网站建设高端大气网页
  • 网站建设安全性天猫商城网官网
  • 景区微网站建设费用本地主机 搭建网站