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

wordpress过滤敏感农产品网站建设及优化项目

wordpress过滤敏感,农产品网站建设及优化项目,济南网站建设团队,id自动导入 wordpress一、思路 基于OpenCV的库#xff1a;对视频中的车道线进行识别 1、视频处理#xff1a;视频读取 2、图像转换#xff1a;图像转换为灰度图 3、噪声去除#xff1a;高斯模糊对图像进行去噪#xff0c;提高边缘检测的准确性 4、边缘检测#xff1a;Canny算法进行边缘检测… 一、思路 基于OpenCV的库对视频中的车道线进行识别 1、视频处理视频读取 2、图像转换图像转换为灰度图 3、噪声去除高斯模糊对图像进行去噪提高边缘检测的准确性 4、边缘检测Canny算法进行边缘检测找出图像中边缘 5、区域裁剪定义ROIRegion of Interest感兴趣区域裁剪出这个区域的边缘检测结果 6、直线检测霍夫变换对ROI区域进行直线检测找出车道线 7、结果展示将检测到的车道线画在原图/视频上 二、实施流程 1. 高斯模糊、Canny边缘检测、霍夫变换 import numpy as np import cv2blur_ksize 5 # 高斯模糊核大小 canny_lthreshold 50 # Canny边缘检测低阈值 canny_hthreshold 150 # Canny边缘检测高阈值 # 霍夫变换参数 rho 1 #rho的步长即直线到图像原点(0,0)点的距离 theta np.pi / 180 #theta的范围 threshold 15 #累加器中的值高于它时才认为是一条直线 min_line_length 40 #线的最短长度比这个短的都被忽略 max_line_gap 20 #两条直线之间的最大间隔小于此值认为是一条直线 2、定义roi_mask函数用于保留感兴趣区域屏蔽掉图像中不需要处理的部分例如天空、树木等只保留路面部分从而提高后续处理的效率和准确性。 #img是输入的图像verticess是兴趣区的四个点的坐标三维的数组 def roi_mask(img, vertices):mask np.zeros_like(img) #生成与输入图像相同大小的图像并使用0填充,图像为黑色mask_color 255cv2.fillPoly(mask, vertices, mask_color) #使用白色填充多边形形成蒙板masked_img cv2.bitwise_and(img, mask) #imgmask经过此操作后兴趣区域以外的部分被蒙住了只留下兴趣区域的图像return masked_img 3、定义draw_lines函数用于后续对检测到的车道线进行绘制图线。 # 对图像进行画线 def draw_lines(img, lines, color[255, 255, 0], thickness2):for line in lines:for x1, y1, x2, y2 in line:cv2.line(img, (x1, y1), (x2, y2), color, thickness) 4、定义hough_lines函数用于通过霍夫变换检测出图像中的直线然后根据这些直线执行draw_lines函数画出车道线 def hough_lines(img, rho, theta, threshold,min_line_len, max_line_gap):lines cv2.HoughLinesP(img, rho, theta, threshold, np.array([]),minLineLengthmin_line_len,maxLineGapmax_line_gap)line_img np.zeros((img.shape[0], img.shape[1], 3), dtypenp.uint8) #生成绘制直线的绘图板黑底# draw_lines(line_img, lines)draw_lanes(line_img, lines)return line_img 5、定义draw_lanes函数用于根据霍夫变换检测到的直线分类、清理、拟合、绘制出车道线 def draw_lanes(img, lines, color[255, 255, 0], thickness8):left_lines, right_lines [], [] #用于存储左边和右边的直线for line in lines: #对直线进行分类for x1, y1, x2, y2 in line:k (y2 - y1) / (x2 - x1)if k 0:left_lines.append(line)else:right_lines.append(line)if (len(left_lines) 0 or len(right_lines) 0):return imgclean_lines(left_lines, 0.1) #弹出左侧不满足斜率要求的直线clean_lines(right_lines, 0.1) #弹出右侧不满足斜率要求的直线left_points [(x1, y1) for line in left_lines for x1, y1, x2, y2 in line] #提取左侧直线族中的所有的第一个点left_points left_points [(x2, y2) for line in left_lines for x1, y1, x2, y2 in line] #提取左侧直线族中的所有的第二个点right_points [(x1, y1) for line in right_lines for x1, y1, x2, y2 in line] #提取右侧直线族中的所有的第一个点right_points right_points [(x2, y2) for line in right_lines for x1, y1, x2, y2 in line] #提取右侧侧直线族中的所有的第二个点left_vtx calc_lane_vertices(left_points, 325, img.shape[0]) #拟合点集生成直线表达式并计算左侧直线在图像中的两个端点的坐标right_vtx calc_lane_vertices(right_points, 325, img.shape[0]) #拟合点集生成直线表达式并计算右侧直线在图像中的两个端点的坐标cv2.line(img, left_vtx[0], left_vtx[1], color, thickness) #画出左侧直线cv2.line(img, right_vtx[0], right_vtx[1], color, thickness) #画出右侧直线 6、定义clean_lines函数用于将斜率不满足要求的直线去除即不进行绘制 #将不满足斜率要求的直线弹出 def clean_lines(lines, threshold):slope [(y2 - y1) / (x2 - x1) for line in lines for x1, y1, x2, y2 in line]while len(lines) 0:mean np.mean(slope) #计算斜率的平均值因为后面会将直线和斜率值弹出diff [abs(s - mean) for s in slope] #计算每条直线斜率与平均值的差值idx np.argmax(diff) #计算差值的最大值的下标if diff[idx] threshold: #将差值大于阈值的直线弹出slope.pop(idx) #弹出斜率lines.pop(idx) #弹出直线else:break 7、定义calc_lane_vertices函数用于根据给定的点集拟合一条直线并计算这条直线在图像中的两个端点的坐标 #拟合点集生成直线表达式并计算直线在图像中的两个端点的坐标 def calc_lane_vertices(point_list, ymin, ymax):x [p[0] for p in point_list] #提取xy [p[1] for p in point_list] #提取yfit np.polyfit(y, x, 1) #用一次多项式xa*yb拟合这些点fit是(a,b)fit_fn np.poly1d(fit) #生成多项式对象a*ybxmin int(fit_fn(ymin)) #计算这条直线在图像中最左侧的横坐标xmax int(fit_fn(ymax)) #计算这条直线在图像中最右侧的横坐标return [(xmin, ymin), (xmax, ymax)] 8、编写主函数。首先读取视频并获取每一帧如果读取帧失败即视频已经播放完毕则跳出循环接着对读取到的帧进行一系列处理包括转换为灰度图、高斯模糊、Canny边缘检测、生成ROI掩膜、霍夫直线检测等然后将处理后的图像与原图融合得到最终的结果最后显示结果图像如果按下Esc键则跳出循环即关闭所有窗口 if __name__ __main__:try:cap cv2.VideoCapture(./video_1.mp4)if (cap.isOpened()): # 视频打开成功flag 1else:flag 0num 0if (flag):while (True):ret,frame cap.read() # 读取一帧if ret False: # 读取帧失败breakgray cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY) #图像转换为灰度图blur_gray cv2.GaussianBlur(gray, (blur_ksize, blur_ksize), 0, 0) #使用高斯模糊去噪声edges cv2.Canny(blur_gray, canny_lthreshold, canny_hthreshold) #使用Canny进行边缘检测roi_vtx np.array([[(0, frame.shape[0]), (460, 325),(520, 325), (frame.shape[1], frame.shape[0])]]) ##目标区域的四个点坐标roi_vtx是一个三维的数组roi_edges roi_mask(edges, roi_vtx) #对边缘检测的图像生成图像蒙板去掉不感兴趣的区域保留兴趣区line_img hough_lines(roi_edges, rho, theta, threshold,min_line_length, max_line_gap) #使用霍夫直线检测并且绘制直线res_img cv2.addWeighted(frame, 0.8, line_img, 1, 0) #将处理后的图像与原图做融合cv2.imshow(meet,res_img)if cv2.waitKey(30) 0xFF 27:breakcv2.waitKey(0)cv2.destroyAllWindows()except:pass # 使用环境dlcv/001#1、 import numpy as np import cv2blur_ksize 5 # 高斯模糊核大小 canny_lthreshold 50 # Canny边缘检测低阈值 canny_hthreshold 150 # Canny边缘检测高阈值 # 霍夫变换参数 rho 1 # rho的步长即直线到图像原点(0,0)点的距离 theta np.pi / 180 # theta的范围 threshold 15 # 累加器中的值高于它时才认为是一条直线 min_line_length 40 # 线的最短长度比这个短的都被忽略 max_line_gap 20 # 两条直线之间的最大间隔小于此值认为是一条直线#2、 #img是输入的图像verticess是兴趣区的四个点的坐标三维的数组 def roi_mask(img, vertices):mask np.zeros_like(img) #生成与输入图像相同大小的图像并使用0填充,图像为黑色mask_color 255cv2.fillPoly(mask, vertices, mask_color) #使用白色填充多边形形成蒙板masked_img cv2.bitwise_and(img, mask) #imgmask经过此操作后兴趣区域以外的部分被蒙住了只留下兴趣区域的图像return masked_img#3、 # 对图像进行画线 def draw_lines(img, lines, color[255, 255, 0], thickness2):for line in lines:for x1, y1, x2, y2 in line:cv2.line(img, (x1, y1), (x2, y2), color, thickness)#4、 def hough_lines(img, rho, theta, threshold,min_line_len, max_line_gap):lines cv2.HoughLinesP(img, rho, theta, threshold, np.array([]),minLineLengthmin_line_len,maxLineGapmax_line_gap)line_img np.zeros((img.shape[0], img.shape[1], 3), dtypenp.uint8) #生成绘制直线的绘图板黑底# draw_lines(line_img, lines)draw_lanes(line_img, lines)return line_img#5、 def draw_lanes(img, lines, color[255, 255, 0], thickness8):left_lines, right_lines [], [] # 用于存储左边和右边的直线for line in lines: # 对直线进行分类for x1, y1, x2, y2 in line:k (y2 - y1) / (x2 - x1)if k 0:left_lines.append(line)else:right_lines.append(line)if (len(left_lines) 0 or len(right_lines) 0):return imgclean_lines(left_lines, 0.1) # 弹出左侧不满足斜率要求的直线clean_lines(right_lines, 0.1) # 弹出右侧不满足斜率要求的直线left_points [(x1, y1) for line in left_lines for x1, y1, x2, y2 in line] # 提取左侧直线族中的所有的第一个点left_points left_points [(x2, y2) for line in left_lines for x1, y1, x2, y2 in line] # 提取左侧直线族中的所有的第二个点right_points [(x1, y1) for line in right_lines for x1, y1, x2, y2 in line] # 提取右侧直线族中的所有的第一个点right_points right_points [(x2, y2) for line in right_lines for x1, y1, x2, y2 in line] # 提取右侧侧直线族中的所有的第二个点left_vtx calc_lane_vertices(left_points, 325, img.shape[0]) # 拟合点集生成直线表达式并计算左侧直线在图像中的两个端点的坐标right_vtx calc_lane_vertices(right_points, 325, img.shape[0]) # 拟合点集生成直线表达式并计算右侧直线在图像中的两个端点的坐标cv2.line(img, left_vtx[0], left_vtx[1], color, thickness) # 画出左侧直线cv2.line(img, right_vtx[0], right_vtx[1], color, thickness) # 画出右侧直线#6、 #将不满足斜率要求的直线弹出 def clean_lines(lines, threshold):slope [(y2 - y1) / (x2 - x1) for line in lines for x1, y1, x2, y2 in line]while len(lines) 0:mean np.mean(slope) #计算斜率的平均值因为后面会将直线和斜率值弹出diff [abs(s - mean) for s in slope] #计算每条直线斜率与平均值的差值idx np.argmax(diff) #计算差值的最大值的下标if diff[idx] threshold: #将差值大于阈值的直线弹出slope.pop(idx) #弹出斜率lines.pop(idx) #弹出直线else:break#7、 #拟合点集生成直线表达式并计算直线在图像中的两个端点的坐标 def calc_lane_vertices(point_list, ymin, ymax):x [p[0] for p in point_list] #提取xy [p[1] for p in point_list] #提取yfit np.polyfit(y, x, 1) #用一次多项式xa*yb拟合这些点fit是(a,b)fit_fn np.poly1d(fit) #生成多项式对象a*ybxmin int(fit_fn(ymin)) #计算这条直线在图像中最左侧的横坐标xmax int(fit_fn(ymax)) #计算这条直线在图像中最右侧的横坐标return [(xmin, ymin), (xmax, ymax)]#8、 if __name__ __main__:try:cap cv2.VideoCapture(1.mp4)if (cap.isOpened()): # 视频打开成功flag 1else:flag 0num 0if (flag):while (True):ret,frame cap.read() # 读取一帧if ret False: # 读取帧失败breakgray cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY) #图像转换为灰度图blur_gray cv2.GaussianBlur(gray, (blur_ksize, blur_ksize), 0, 0) #使用高斯模糊去噪声edges cv2.Canny(blur_gray, canny_lthreshold, canny_hthreshold) #使用Canny进行边缘检测roi_vtx np.array([[(0, frame.shape[0]), (460, 325),(520, 325), (frame.shape[1], frame.shape[0])]]) ##目标区域的四个点坐标roi_vtx是一个三维的数组roi_edges roi_mask(edges, roi_vtx) #对边缘检测的图像生成图像蒙板去掉不感兴趣的区域保留兴趣区line_img hough_lines(roi_edges, rho, theta, threshold,min_line_length, max_line_gap) #使用霍夫直线检测并且绘制直线res_img cv2.addWeighted(frame, 0.8, line_img, 1, 0) #将处理后的图像与原图做融合cv2.imshow(meet,res_img)if cv2.waitKey(30) 0xFF 27:breakcv2.waitKey(0)cv2.destroyAllWindows()except:pass
http://www.pierceye.com/news/574525/

相关文章:

  • 网站改版意义服务营销案例100例
  • 服装厂做1688网站效果好不好做lol数据的网站有哪些
  • 棋牌代理平台网站优化大赛
  • 网站制作视频教程新手必看深圳建网站哪个公
  • 做网站的公司盐城网站排名优化培训
  • 营销型网站搭建公司3d云打印网站开发
  • 网站建设首选沈阳高端网站建设搬家公司收费标准
  • 网站建设需要多少钱知乎企业管理软件行业未来的发展
  • 网站建设与管理 自考百度网站地图生成
  • 在线优化网站源码站
  • 中企动力做网站一次性付款零基础学室内设计
  • 企炬网站wordpress会员付费插件
  • 在哪里购买虚拟空间建设网站网页设计培训机构培训费
  • 网站建设的色彩搭配做网站赚钱吗 怎么赚
  • 门头沟富阳网站建设西安企业电话
  • 电子商务网站建设概括湘潭专业seo优化推荐
  • 炫彩发光字制作免费网站动漫制作就业方向
  • 阿里巴巴可以做网站吗网站的可用性
  • 云虚拟主机怎么做2个网站装饰工程施工
  • 网站备案查询流程wordpress手机页面没有注册
  • 辽宁城乡建设集团官方网站精品课程网站建设
  • 威海 网站建设个人做网站可以盈利么
  • 机关网站源码网站建设 备案什么意思
  • 做理财的网站有哪些怎么弄数据库备份做网站
  • 网站不接入备案易企互联网站建设
  • 那种网站打不开北京网站建设找华网天下
  • 网站建设seo优化浙江网站名称怎么收录
  • 天津网站制作工具想自己做网站 有免费的吗
  • 宝塔织梦网站建设求网站备案照片
  • 聊城住房和城乡建设厅网站研发项目管理软件