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

网络公司seo推广seo新方法

网络公司seo推广,seo新方法,溧水区住房建设局网站,建设独立服务器网站文章目录 图像轮廓查找轮廓绘制轮廓轮廓的面积与周长多边形逼近与凸包外接矩形项目总览【车辆统计】视频加载【车辆统计】去背景【车辆统计】形态学处理【车辆统计】逻辑处理【车辆统计】显示信息【车辆统计】 图像轮廓 查找轮廓 # -*- coding: utf-8 -*- import cv2 import n…

文章目录

  • 图像轮廓
  • 查找轮廓
  • 绘制轮廓
  • 轮廓的面积与周长
  • 多边形逼近与凸包
  • 外接矩形
  • 项目总览【车辆统计】
  • 视频加载【车辆统计】
  • 去背景【车辆统计】
  • 形态学处理【车辆统计】
  • 逻辑处理【车辆统计】
  • 显示信息【车辆统计】

图像轮廓

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查找轮廓

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('./contours1.jpeg')
# print(img.shape)# 转变为单通道
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 二值化
ret, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# print(gray.shape)cv2.imshow('img', img)
cv2.imshow('binary', binary)# 轮廓查找
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)print(contours)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述

绘制轮廓

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('./contours1.jpeg')
# print(img.shape)# 转变为单通道
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 二值化
ret, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# print(gray.shape)# 轮廓查找
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)print(contours)# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 255, 0), 1)cv2.imshow('img', img)
cv2.imshow('binary', binary)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述
详细可参考官方资料

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('./contours1.jpeg')
# print(img.shape)# 转变为单通道
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 二值化
ret, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# print(gray.shape)# 轮廓查找
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)print(contours)# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 255, 0), 1)cv2.imshow('img', img)
cv2.imshow('binary', binary)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

轮廓的面积与周长

在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('./contours1.jpeg')
# print(img.shape)# 转变为单通道
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 二值化
ret, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# print(gray.shape)# 轮廓查找
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)print(contours)# 绘制轮廓
cv2.drawContours(img, contours, 0, (0, 255, 0), 1)
# 计算面积
area = cv2.contourArea(contours[0])
print("area=%d"%(area))# 计算周长
len = cv2.arcLength(contours[0], True)
print("len=%d"%(len))# cv2.imshow('img', img)
# cv2.imshow('binary', binary)# key = cv2.waitKey(0) & 0xff
# if key == ord('q'):
#     cv2.destroyAllWindows()

在这里插入图片描述

多边形逼近与凸包

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npimg = cv2.imread('./hand.png')
# print(img.shape)# 转变为单通道
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 二值化
ret, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# print(gray.shape)# 轮廓查找
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)print(len(contours))# 绘制轮廓
cv2.drawContours(img, contours, 0, (0, 255, 0), 1)
# 计算面积
# area = cv2.contourArea(contours[0])
# print("area=%d"%(area))# 计算周长
# len = cv2.arcLength(contours[0], True)
# print("len=%d"%(len))cv2.imshow('img', img)
# cv2.imshow('binary', binary)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npdef drawShape(src, points):i = 0while i < len(points):if(i == len(points) - 1):x, y = points[i][0]x1, y1 = points[0][0]cv2.line(src, (x, y), (x1, y1), (0, 255, 0), 2)else:x, y = points[i][0]x1, y1 = points[i + 1][0]cv2.line(src, (x, y), (x1, y1), (0, 255, 0), 2)i = i + 1img = cv2.imread('./hand.png')
# print(img.shape)# 转变为单通道
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 二值化
ret, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# print(gray.shape)# 轮廓查找
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# print(len(contours))# 绘制轮廓
# cv2.drawContours(img, contours, 0, (0, 255, 0), 1)
# 计算面积
# area = cv2.contourArea(contours[0])
# print("area=%d"%(area))# 计算周长
# len = cv2.arcLength(contours[0], True)
# print("len=%d"%(len))e = 5
approx = cv2.approxPolyDP(contours[0], e, True)
drawShape(img, approx)hull = cv2.convexHull(contours[0])
drawShape(img, hull)cv2.imshow('img', img)
# cv2.imshow('binary', binary)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

外接矩形

在这里插入图片描述
红框就是最小外接矩形,绿框就是最大外接矩形。

最小外接矩形可以看图形有没有旋转
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
详情见参考文档
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npdef drawShape(src, points):i = 0while i < len(points):if(i == len(points) - 1):x, y = points[i][0]x1, y1 = points[0][0]cv2.line(src, (x, y), (x1, y1), (0, 255, 0), 2)else:x, y = points[i][0]x1, y1 = points[i + 1][0]cv2.line(src, (x, y), (x1, y1), (0, 255, 0), 2)i = i + 1img = cv2.imread('./hello.jpeg')
# print(img.shape)# 转变为单通道
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 二值化
ret, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)
# print(gray.shape)# 轮廓查找
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# print(len(contours))# 绘制轮廓
# cv2.drawContours(img, contours, 1, (0, 255, 0), 1)
# 计算面积
# area = cv2.contourArea(contours[0])
# print("area=%d"%(area))# 计算周长
# len = cv2.arcLength(contours[0], True)
# print("len=%d"%(len))# e = 5
# 多边形逼近
# approx = cv2.approxPolyDP(contours[0], e, True)
# drawShape(img, approx)# 凸包
# hull = cv2.convexHull(contours[0])
# drawShape(img, hull)r = cv2.minAreaRect(contours[1])
box = cv2.boxPoints(r)
box = np.int0(box)
cv2.drawContours(img, [box], 0, (0, 255, 0), 2)x, y, w, h = cv2.boundingRect(contours[1])
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)cv2.imshow('img', img)
# cv2.imshow('binary', binary)key = cv2.waitKey(0) & 0xff
if key == ord('q'):cv2.destroyAllWindows()

在这里插入图片描述

项目总览【车辆统计】

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

视频加载【车辆统计】

# -*- coding: utf-8 -*-
import cv2
import numpy as npcap = cv2.VideoCapture('./video.mp4')while True:ret, frame = cap.read()if(ret == True):cv2.imshow('video', frame)key = cv2.waitKey(1)if(key == 27):breakcap.release()
cv2.destroyAllWindows()

在这里插入图片描述

去背景【车辆统计】

如果视频是25fps,即每秒25帧,即1000ms过25帧,那么200ms就走5帧(25/1000*200=5)
在这里插入图片描述
在这里插入图片描述
运动的物体为前景,静止的物体就是背景

详细可以参考官方文档
在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npcap = cv2.VideoCapture('./video.mp4')bgsubmog = cv2.createBackgroundSubtractorMOG2()
while True:ret, frame = cap.read()if(ret == True):mask = bgsubmog.apply(frame)cv2.imshow('video', mask)key = cv2.waitKey(1)if(key == 27):breakcap.release()
cv2.destroyAllWindows()

在这里插入图片描述

# -*- coding: utf-8 -*-
import cv2
import numpy as npcap = cv2.VideoCapture('./video.mp4')bgsubmog = cv2.createBackgroundSubtractorMOG2()
tst = cv2.createBackgroundSubtractorMOG2()while True:ret, frame = cap.read()if(ret == True):# 灰度图cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 去噪(高斯)blur = cv2.GaussianBlur(frame, (3, 3), 5)# 去背景mask = bgsubmog.apply(blur)t = tst.apply(frame)cv2.imshow('video', mask)cv2.imshow('t', t)key = cv2.waitKey(40)if(key == 27):breakcap.release()
cv2.destroyAllWindows()

在这里插入图片描述

形态学处理【车辆统计】

# -*- coding: utf-8 -*-
import cv2
import numpy as npcap = cv2.VideoCapture('./video.mp4')bgsubmog = cv2.createBackgroundSubtractorMOG2()
# tst = cv2.createBackgroundSubtractorMOG2()# 形态学kernel
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
kernel2 = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))while True:ret, frame = cap.read()if(ret == True):# 灰度图cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 去噪(高斯)blur = cv2.GaussianBlur(frame, (3, 3), 1)# 去背景mask = bgsubmog.apply(blur)# t = tst.apply(frame)# 腐蚀,去掉图中小斑块erode = cv2.erode(mask, kernel, iterations=1)# 膨胀,还原放大dilate = cv2.dilate(erode, kernel2, iterations=5)# 闭操作,去掉物体内部噪声close = cv2.morphologyEx(dilate, cv2.MORPH_CLOSE, kernel)close = cv2.morphologyEx(close, cv2.MORPH_CLOSE, kernel)contours, hierarchy = cv2.findContours(close, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)for i, c in enumerate(contours):x, y, w, h = cv2.boundingRect(c)cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)cv2.imshow('video', frame)# cv2.imshow('erode', close)key = cv2.waitKey(40)if(key == 27):breakcap.release()
cv2.destroyAllWindows()

在这里插入图片描述
在这里插入图片描述

逻辑处理【车辆统计】

# -*- coding: utf-8 -*-
import cv2
import numpy as npmin_w = 50
min_h = 50
max_w = 800
max_h = 800# 检测线的高度
line_high = 480# 存放有效车辆数组
cars = []# 统计车的数量
carnums = 0# 线的偏移
offset = 10# 求中心点
def center(x, y, w, h):x1 = int(w / 2)y1 = int(h / 2)cx = x + x1cy = y + y1return cx, cycap = cv2.VideoCapture('./video.mp4')bgsubmog = cv2.createBackgroundSubtractorMOG2()
# tst = cv2.createBackgroundSubtractorMOG2()# 形态学kernel
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
kernel2 = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))while True:ret, frame = cap.read()if(ret == True):# print(frame.shape)# (584, 1280, 3)# 灰度图cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 去噪(高斯)blur = cv2.GaussianBlur(frame, (3, 3), 1)# 去背景mask = bgsubmog.apply(blur)# t = tst.apply(frame)# 腐蚀,去掉图中小斑块erode = cv2.erode(mask, kernel, iterations=1)# 膨胀,还原放大dilate = cv2.dilate(erode, kernel2, iterations=3)# 闭操作,去掉物体内部噪声close = cv2.morphologyEx(dilate, cv2.MORPH_CLOSE, kernel)close = cv2.morphologyEx(close, cv2.MORPH_CLOSE, kernel)contours, hierarchy = cv2.findContours(close, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)cv2.line(frame, (100, line_high), (1100, line_high), (255, 255, 0), 2)for i, c in enumerate(contours):x, y, w, h = cv2.boundingRect(c)# 对车辆的宽高进行判断,以验证是否是有效车辆isValid = (x >= min_w) and (h >= min_h) and (x <= max_w) and (h <= max_h)if(not isValid):continue# 有效的车cpoint = center(x, y, w, h)cars.append(cpoint)cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)for xc, yc in cars:if(yc > line_high - offset and yc < line_high + offset):carnums += 1cars.remove((xc, yc))print(carnums)cv2.imshow('video', frame)# cv2.imshow('erode', close)key = cv2.waitKey(40)if(key == 27):breakcap.release()
cv2.destroyAllWindows()

在这里插入图片描述

显示信息【车辆统计】

# -*- coding: utf-8 -*-
import cv2
import numpy as npmin_w = 50
min_h = 50
max_w = 800
max_h = 800# 检测线的高度
line_high = 480# 存放有效车辆数组
cars = []# 统计车的数量
carnums = 0# 线的偏移
offset = 10# 求中心点
def center(x, y, w, h):x1 = int(w / 2)y1 = int(h / 2)cx = x + x1cy = y + y1return cx, cycap = cv2.VideoCapture('./video.mp4')bgsubmog = cv2.createBackgroundSubtractorMOG2()
# tst = cv2.createBackgroundSubtractorMOG2()# 形态学kernel
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
kernel2 = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))while True:ret, frame = cap.read()if(ret == True):# print(frame.shape)# (584, 1280, 3)# 灰度图cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 去噪(高斯)blur = cv2.GaussianBlur(frame, (3, 3), 1)# 去背景mask = bgsubmog.apply(blur)# t = tst.apply(frame)# 腐蚀,去掉图中小斑块erode = cv2.erode(mask, kernel, iterations=1)# 膨胀,还原放大dilate = cv2.dilate(erode, kernel2, iterations=3)# 闭操作,去掉物体内部噪声close = cv2.morphologyEx(dilate, cv2.MORPH_CLOSE, kernel)close = cv2.morphologyEx(close, cv2.MORPH_CLOSE, kernel)contours, hierarchy = cv2.findContours(close, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 画一条检测线cv2.line(frame, (100, line_high), (1100, line_high), (255, 255, 0), 2)for i, c in enumerate(contours):x, y, w, h = cv2.boundingRect(c)# 对车辆的宽高进行判断,以验证是否是有效车辆isValid = (x >= min_w) and (h >= min_h) and (x <= max_w) and (h <= max_h)if(not isValid):continue# 有效的车cpoint = center(x, y, w, h)cars.append(cpoint)cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)cv2.circle(frame, (cpoint), 5, (0, 0, 255), -1)for xc, yc in cars:if(yc > line_high - offset and yc < line_high + offset):carnums += 1cars.remove((xc, yc))print(carnums)cv2.putText(frame, "Cars Count:" + str(carnums), (500, 60), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 255, 0), 3)cv2.imshow('video', frame)# cv2.imshow('erode', close)key = cv2.waitKey(40)if(key == 27):breakcap.release()
cv2.destroyAllWindows()

在这里插入图片描述
通过实践可以发现传统的目标检测缺点很多,比方说可能重复计数…所以之后我们需要结合深度学习来提高目标检测的精度

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

http://www.dt0577.cn/news/40555.html

相关文章:

  • 做代购 需要独立网站中国关键词网站
  • 上海手机站网站建设磁力链最好用的搜索引擎
  • 做网站的成本有多少网站维护费用
  • 百度seo优化推广软件seo技术服务外包
  • 做网站用什么语言简单杭州网站建设方案优化
  • 商业网站开发模式百度北京分公司官网
  • 绍兴网站专业制作静态网站模板
  • 使用asp.net做购物网站武汉seo搜索引擎
  • 广告联盟没有网站怎么做百度关键词排名突然消失了
  • 阿里云做的海外网站怎么样全网营销网络推广
  • 哪里有做营销型网站的公司网站优化外包
  • 网站规划建设与管理维护论文漳州网络推广
  • jb网站建立搜狗网站收录
  • 为女朋友做的网站深圳公关公司
  • 有赞短链接生成陕西seo
  • 怎么做进入网站js特效sem优化托管
  • 福田做网站需要多少钱长沙网站推广排名
  • 做外贸的有哪些网站有哪些品牌推广工作内容
  • 网站文件结构游戏推广员骗局
  • 做h5找图网站公司关键词排名优化
  • 公司有多少做网站seo排名怎么看
  • 网上做衣服的网站阿里巴巴官网首页
  • 网站建设 上海百度推广平台登陆
  • wordpress 个性网站关键词分为哪几类
  • 大良营销网站建设市场市场营销案例分析及解答
  • 网站后台默认密码加盟网络营销推广公司
  • 影楼网站制作简单制作html静态网页
  • 网站做cdn需要多少钱网站统计代码
  • 沈阳网站app制作百度大搜是什么
  • 简洁 手机 导航网站模板下载安装北京seo站内优化