hough变换可以让我们检测到直线,这在前面已有详解,对于车道检测,我们需要其到图像边界的延长线一遍之后数据帧分析。

以下代码帮助我们在opencv中画延长线,本来想用虚线表示延长线的,无奈参数调不好了……只好把bug的虚线贴上去注释掉了,希望牛人能给点帮助帮我调下吧

其他的代码部分可供参考

  1. void CCVMFCView::OnDottedLine(CvPoint p1,CvPoint p2,IplImage *workimg)
  2. {
  3. double k=(p2.y-p1.y)/(p2.x-p1.x+0.000001);
  4. double DOT_STEP;
  5. CvPoint pa=p1,pb=p1;
  6. cvLine(workimg,p1,p2,CV_RGB(255,255,0),3, CV_AA, 0 );
  7. //dotted line , has bug        ╮(╯_╰)╭
  8. //while(pb.x>0&&pb.x<workimg->width&&pb.y<p2.y)
  9. //{
  10. //  pb.x+=DOT_STEP;
  11. //  pb.y+=DOT_STEP*k;
  12. //  cvLine(workimg,pa,pb,CV_RGB(255,255,0),3, CV_AA, 0 );
  13. //  pb.x+=DOT_STEP;
  14. //  pb.y+=DOT_STEP*k;
  15. //  pa=pb;
  16. //  pb.x+=DOT_STEP;
  17. //  pb.y+=DOT_STEP*k;
  18. //}
  19. }
  20. // find two endpoint of the faint line
  21. void CCVMFCView::OnDrawDotline(CvPoint s, CvPoint e,IplImage *workimg)
  22. {
  23. CvPoint pa,pb;
  24. if(s.y>e.y)//swap
  25. {
  26. pa=s;
  27. s=e;
  28. e=pa;
  29. }
  30. double k=(e.y-s.y)/(e.x-s.x+0.000001);
  31. double h=workimg->height,w=workimg->width;
  32. pb=s;
  33. pa.y=0,pa.x=s.x-s.y/k;          //start point on the low line
  34. if(pa.x<0)       //start point on the left line
  35. pa.x=0,     pa.y=k*s.x;
  36. else if(pa.x>=w)
  37. pa.x=w, pa.y=s.y+k*(w-s.x);
  38. OnDottedLine(pb,pa,workimg);
  39. pa=pb=e;
  40. pb.y=h; pb.x+=(h-e.y)/k;
  41. if(pb.x>w)
  42. pb.y=e.y+k*(w-e.x), pb.x=w;
  43. else if(pb.x<0)
  44. pb.y=e.y-k*e.x,     pb.x=0;
  45. OnDottedLine(pa,pb,workimg);
  46. }

实验结果:

原图:

车道检测结果:

hough变换检测+延长线(绿:检测结果。黄:延长线)

from: http://blog.csdn.net/abcjennifer/article/details/7440887

opencv 画延长线的更多相关文章

  1. 学习OpenCV——用OpenCv画漫画

    闲的时候用OpenCV画漫画也挺有意思,虽然效果不好(达不到上面所实现的效果), 参数需要调整,还是大头贴而且噪声小的图像比较合适 而且可以熟悉一下关于各种滤波的操作比如:双边滤波: #include ...

  2. 使用OpenCV画折线图

    使用OpenCV画直方图是一件轻松的事情,画折线图就没有那么Easy了,还是使用一个库吧: GraphUtils 源代码添加入工程 原文链接:http://www.360doc.com/content ...

  3. python3 使用opencv 画基本图形

    在Python3 环境下安装opencv-python 后练习画基本图形: import numpy as np import cv2 # BGR format GREEN = (0, 255, 0) ...

  4. opencv画出轮廓外接矩形

    Mat cannyImage; /// Detect edges using canny Canny(src, cannyImage, , , ); vector<vector<Point ...

  5. opencv 震撼你的视觉-------基础篇

    opencv 最近在做一个钓鱼网站的项目中用到了一个叫opencv的玩意儿,以前没接触过.感觉挺新鲜的,而且项目中要用,所以就问了一下度娘(是想Google一下的,显得高大上and专业一点,但是英语水 ...

  6. Python OpenCV —— geometric

    用OpenCV画几何图形. import numpy as np import cv2 # Create a black image img = np.zeros((521,512,3), np.ui ...

  7. opencv实现坐标旋转(教你框住小姐姐)

    一.项目背景 最近在做一个人脸检测项目,需要接入百度AI的系统进行识别和检测.主要流程就是往指定的URL上post图片上去,之后接收检测结果就好了. 百度的检测结果包含这样的信息: left - 人脸 ...

  8. Python+OpenCV图像处理(十五)—— 圆检测

    简介: 1.霍夫圆变换的基本原理和霍夫线变换原理类似,只是点对应的二维极径.极角空间被三维的圆心和半径空间取代.在标准霍夫圆变换中,原图像的边缘图像的任意点对应的经过这个点的所有可能圆在三维空间用圆心 ...

  9. 【python+opencv】直线检测+圆检测

     Python+OpenCV图像处理—— 直线检测 直线检测理论知识: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进 ...

随机推荐

  1. 机器学习实战——k-邻近算法:约会网站

    1.kNN 算法 算法说明: set<X1,X2……Xn> 为已知类别数据集,预测 点Xt 的类别: (1)计算中的set中每一个点与Xt的距离 (2)按距离增序排列 (3)选择距离最小的 ...

  2. nodejs fs 模块的用途

    /*** New node filefs 操作*/var fs = require(“fs”); /*创建文件 var fileName = “anps_hsj”;fs.mkdir(fileName, ...

  3. C++ 字符串相关函数

    <转>自:http://zhidao.baidu.com/question/173202165.html 首先就是memcpy表头文件: #include <string.h> ...

  4. 华为章宇:如何学习开源项目及Ceph的浅析

    转自http://www.csdn.net/article/2014-04-10/2819247-how-to-learn-opensouce-project-&-ceph 摘要:开源技术的学 ...

  5. android开发修改相机扫描二维码框的高宽

    我用的是网上一个现成的例子,可以直接用,但是高宽不合适,现在主流都是大屏幕手机了,所以需要更改. 找到CameraManager 类,更改下面的方法 public Rect getFramingRec ...

  6. c# 取 list前100条数据

    [问] List<KeyWord> sortedList = (from a in keyWordList orderby a.Total descending select a).ToL ...

  7. sqlserver 2008r2 表分区拆分问题

    问题描述: 对tab1表实行自动天分区,每天通过sqlserver代理-作业00:00点自动生成分区: 因有次停了数据库服务,sqlserver 代理服务忘记开启,导致当天00:00没有生成新分区: ...

  8. Exception in thread "http-bio-8081-exec-3" java.lang.OutOfMemoryError: PermGen space

    前言: 在http://www.cnblogs.com/wql025/p/4865673.html一文中我曾描述这种异常也提供了解决方式,但效果不太理想,现在用本文的方式,效果显著. 目前此项目只能登 ...

  9. 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!

    // test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  10. CF 317D Game with Powers

    题解: 将一个数的指数看着一个堆,问题变成这些堆的异或值 分析一个堆的情况,打SG表. #include<stdio.h> #include<string.h> ]; char ...