Opencv画延长线

2024-04-07 11:08
文章标签 opencv 延长线

本文主要是介绍Opencv画延长线,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自   http://blog.csdn.net/abcjennifer/article/details/7440887

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

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

其他的代码部分可供参考

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

实验结果:

原图:


车道检测结果:



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




这篇关于Opencv画延长线的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/882435

相关文章

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

c/c++的opencv实现图片膨胀

《c/c++的opencv实现图片膨胀》图像膨胀是形态学操作,通过结构元素扩张亮区填充孔洞、连接断开部分、加粗物体,OpenCV的cv::dilate函数实现该操作,本文就来介绍一下opencv图片... 目录什么是图像膨胀?结构元素 (KerChina编程nel)OpenCV 中的 cv::dilate() 函

qtcreater配置opencv遇到的坑及实践记录

《qtcreater配置opencv遇到的坑及实践记录》我配置opencv不管是按照网上的教程还是deepseek发现都有些问题,下面是我的配置方法以及实践成功的心得,感兴趣的朋友跟随小编一起看看吧... 目录电脑环境下载环境变量配置qmake加入外部库测试配置我配置opencv不管是按照网上的教程还是de

python+OpenCV反投影图像的实现示例详解

《python+OpenCV反投影图像的实现示例详解》:本文主要介绍python+OpenCV反投影图像的实现示例详解,本文通过实例代码图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前言二、什么是反投影图像三、反投影图像的概念四、反向投影的工作原理一、利用反向投影backproj