精华内容
下载资源
问答
  • 。。。 。。。 ...连接1—@作直线穿过4,7;连接@ — *作直线穿过8,6;...连接* — 1作直线穿过3,2:连接1—9作直线穿过5 @,*可以看做是虚拟的不存在的点!! 很简单的!! 看过《邋遢大王》吗??

    。。。
    。。。
    。。。

    1   2   3   *
    4   5   6
    7   8   9
    @
    连接1—@作直线穿过4,7;连接@ — *作直线穿过8,6;
    连接* — 1作直线穿过3,2:连接1—9作直线穿过5
    @,*可以看做是虚拟的不存在的点!!
    很简单的!!
    看过《邋遢大王》吗??

    展开全文
  • 三、ObjectARX 创建直线

    千次阅读 2015-11-10 16:40:50
    使用ObjectARX 在vs2008中创建直线: 主要过程如下 思路 首先来看看,在 AutoCAD 中,使用 LINE 命令创建直线,需要哪些东西: 命令: _line 指定第点: 0,0 指定下一点或 [放弃(U)]: 100,100 ...

    使用ObjectARX 在vs2008中创建一条直线:

    主要过程如下

    思路
    首先来看看,在 AutoCAD 中,使用 LINE 命令创建一条直线,需要哪些东西:
    命令: _line
    指定第一点: 0,0
    指定下一点或 [放弃(U)]: 100,100
    指定下一点或 [放弃(U)]:
    从上面的命令提示可以看出,创建一条直线,需要用户指定起点和终点。
    在继续之前,必须给大家介绍一点数据库最基础的几个名词:
    表:表是数据库的组成单位,一个数据库至少包含一个表。
    记录:记录是表的组成单位,一个表可能包含多条记录,也可能不包含任何记录。
    2.1用来描述AutoCAD数据库的基本结构再好不过了。从图中来看,实体包含在块表记
    录中,因此要创建一个图形对象,需要遵循下面的基本步骤:
    1)确定要创建对象的图形数据库;
    2)获得图形数据库的块表;
    3)获得一个存储实体的块表记录,所有模型空间的实体都存储在模型空间的特定记
    录中。
    2 章 创建和编辑基本图形对象
    4)创建实体类的一个对象,将该对象附加到特定的块表记录中。


    2、利用向导新建一ObjectARX项目。


    图片过程如上如所示。


    3完整的代码片段 

    static void CHAP2CreateLine(void)
    	{
    		// Add your code for command CHAP2.CreateLine here
    		AcGePoint3d ptStart(0,0,0);//创建一个3d空间的点
    		AcGePoint3d ptEnd(100,100,0);
    		AcDbLine *pLine = new AcDbLine(ptStart,ptEnd);//这个类代表了CAD里面的线实体,起始点终结点
    
    		//获取指向块表的指针
    
    		AcDbBlockTable *pBlockTable;//声明只想块表的指针
    		acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);//获取快编织针
    		//acdbHostApplicationServices()->workingDataBase()->getBlockTable(pBlockTable,AcDb::kForRead);//
    		AcDbBlockTableRecord *pBlockTableRecord;//声明一个块表记录区的指针
    		pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);//将空间模型区域的记录地址赋给上声明的变量 模式为写
    	
    		AcDbObjectId lineld;//声明ID
    		pBlockTableRecord->appendAcDbEntity(lineld,pLine);//将ID与实体传入
    //关闭所有这个很关键 用到了什么就要吧所有的都关闭不然会出现问题。
    		pBlockTable->close();
    		pBlockTableRecord->close();
    		pLine->close(); 
    
    	}

    新建命令之后在命令函数的里面添加代码如上。


    可能会有错误提示:

    编译错误的提示为: AcDbLine 是一个未定义的标识符。已经知道了 AcDbLine ObjectARX 中的一个类,那么就要找到其定义的位置,将其所在的头文件包含到当前文件中来。如何确定 AcDbLine 类需要包含哪个头文件呢?打开ObjectARX帮助文档中的ObjectARX Reference,转到【索引】选项卡,在文本框中输入AcDbLine


    即可找到头文件  添加即可

    展开全文
  • 我把坐标打印出来后发现是同直线被找到了多次。这种情况是参数问题吗?还是能有其他办法解决? ![图片说明](https://img-ask.csdn.net/upload/201810/10/1539149377_951092.png) 左边图是形态学处理后的结果,...
  • 霍夫线变换——找出图片中的直线

    千次阅读 2017-04-03 16:52:57
    本文来源:霍夫线变换 目标 在这个部分您将学习到: ...使用OpenCV的以下函数 HoughLines 和 HoughLinesP 来检测图像中的直线. ...霍夫线变换是种用来寻找直线的方法.是用霍夫线变换之前, 首先要对图像进行

    本文来源:霍夫线变换

    目标

    在这个部分您将学习到:

    使用OpenCV的以下函数 HoughLines 和 HoughLinesP 来检测图像中的直线.

    原理

    Note

     

    以下原理的说明来自书籍 学习OpenCV 作者Bradski和Kaehler.

    霍夫线变换

    1. 霍夫线变换是一种用来寻找直线的方法.
    2. 是用霍夫线变换之前, 首先要对图像进行边缘检测的处理,也即霍夫线变换的直接输入只能是边缘二值图像.

    它是如何实现的?

    1. 众所周知, 一条直线在图像二维空间可由两个变量表示. 例如:

      1. 在 笛卡尔坐标系: 可由参数: (m,b) 斜率和截距表示.
      2. 在 极坐标系: 可由参数: (r,\theta) 极径和极角表示
      Line variables

      对于霍夫变换, 我们将用 极坐标系 来表示直线. 因此, 直线的表达式可为:

      y = \left ( -\dfrac{\cos \theta}{\sin \theta} \right ) x + \left ( \dfrac{r}{\sin \theta} \right )

      化简得: r = x \cos \theta + y \sin \theta

    2. 一般来说对于点 (x_{0}, y_{0}), 我们可以将通过这个点的一族直线统一定义为:

      r_{\theta} = x_{0} \cdot \cos \theta  + y_{0} \cdot \sin \theta

      这就意味着每一对 (r_{\theta},\theta) 代表一条通过点 (x_{0}, y_{0}) 的直线.

    3. 如果对于一个给定点 (x_{0}, y_{0}) 我们在极坐标对极径极角平面绘出所有通过它的直线, 将得到一条正弦曲线. 例如, 对于给定点 x_{0} = 8 and y_{0} = 6 我们可以绘出下图 (在平面 \theta - r):

      Polar plot of a the family of lines of a point

      只绘出满足下列条件的点 r > 0 and 0< \theta < 2 \pi.

    4. 我们可以对图像中所有的点进行上述操作. 如果两个不同点进行上述操作后得到的曲线在平面 \theta - r 相交, 这就意味着它们通过同一条直线. 例如, 接上面的例子我们继续对点: x_{1} = 9y_{1} = 4 和点 x_{2} = 12y_{2} = 3 绘图, 得到下图:

      Polar plot of the family of lines for three points

      这三条曲线在 \theta - r 平面相交于点 (0.925, 9.6), 坐标表示的是参数对 (\theta, r) 或者是说点 (x_{0}, y_{0}), 点 (x_{1}, y_{1}) 和点 (x_{2}, y_{2}) 组成的平面内的的直线.

    5. 那么以上的材料要说明什么呢? 这意味着一般来说, 一条直线能够通过在平面 \theta - r 寻找交于一点的曲线数量来 检测. 越多曲线交于一点也就意味着这个交点表示的直线由更多的点组成. 一般来说我们可以通过设置直线上点的 阈值 来定义多少条曲线交于一点我们才认为 检测 到了一条直线.

    6. 这就是霍夫线变换要做的. 它追踪图像中每个点对应曲线间的交点. 如果交于一点的曲线的数量超过了 阈值, 那么可以认为这个交点所代表的参数对 (\theta, r_{\theta}) 在原图像中为一条直线.

    标准霍夫线变换和统计概率霍夫线变换

    OpenCV实现了以下两种霍夫线变换:

    1. 标准霍夫线变换
    • 原理在上面的部分已经说明了. 它能给我们提供一组参数对 (\theta, r_{\theta}) 的集合来表示检测到的直线
    • 在OpenCV 中通过函数 HoughLines 来实现
    1. 统计概率霍夫线变换
    • 这是执行起来效率更高的霍夫线变换. 它输出检测到的直线的端点 (x_{0}, y_{0}, x_{1}, y_{1})
    • 在OpenCV 中它通过函数 HoughLinesP 来实现

    代码

    1. 这个程序是用来做什么的?
      • 加载一幅图片
      • 对图片进行 标准霍夫线变换 或是 统计概率霍夫线变换.
      • 分别在两个窗口显示原图像和绘出检测到直线的图像.
    2. 我们将要说明的例程能从 这里 下载。 一个更高级的版本 (能同时演示标准霍夫线变换和统计概率霍夫线变换并带有活动条来改变变换的阈值) 能从这里 下载。
    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/imgproc/imgproc.hpp"
    
    #include <iostream>
    
    using namespace cv;
    using namespace std;
    
    void help()
    {
     cout << "\nThis program demonstrates line finding with the Hough transform.\n"
             "Usage:\n"
             "./houghlines <image_name>, Default is pic1.jpg\n" << endl;
    }
    
    int main(int argc, char** argv)
    {
     const char* filename = argc >= 2 ? argv[1] : "pic1.jpg";
    
     Mat src = imread(filename, 0);
     if(src.empty())
     {
         help();
         cout << "can not open " << filename << endl;
         return -1;
     }
    
     Mat dst, cdst;
     Canny(src, dst, 50, 200, 3);
     cvtColor(dst, cdst, CV_GRAY2BGR);
    
     #if 0
      vector<Vec2f> lines;
      HoughLines(dst, lines, 1, CV_PI/180, 100, 0, 0 );
    
      for( size_t i = 0; i < lines.size(); i++ )
      {
         float rho = lines[i][0], theta = lines[i][1];
         Point pt1, pt2;
         double a = cos(theta), b = sin(theta);
         double x0 = a*rho, y0 = b*rho;
         pt1.x = cvRound(x0 + 1000*(-b));
         pt1.y = cvRound(y0 + 1000*(a));
         pt2.x = cvRound(x0 - 1000*(-b));
         pt2.y = cvRound(y0 - 1000*(a));
         line( cdst, pt1, pt2, Scalar(0,0,255), 3, CV_AA);
      }
     #else
      vector<Vec4i> lines;
      HoughLinesP(dst, lines, 1, CV_PI/180, 50, 50, 10 );
      for( size_t i = 0; i < lines.size(); i++ )
      {
        Vec4i l = lines[i];
        line( cdst, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0,0,255), 3, CV_AA);
      }
     #endif
     imshow("source", src);
     imshow("detected lines", cdst);
    
     waitKey();
    
     return 0;
    }
    

    代码说明

    1. 加载图片

      Mat src = imread(filename, 0);
      if(src.empty())
      {
        help();
        cout << "can not open " << filename << endl;
        return -1;
      }
      
    2. 用Canny算子对图像进行边缘检测

      Canny(src, dst, 50, 200, 3);
      

      现在我们将要执行霍夫线变换. 我们将会说明怎样使用OpenCV的函数做到这一点:

    3. 标准霍夫线变换

      1. 首先, 你要执行变换:

        vector<Vec2f> lines;
        HoughLines(dst, lines, 1, CV_PI/180, 100, 0, 0 );
        

        带有以下自变量:

        • dst: 边缘检测的输出图像. 它应该是个灰度图 (但事实上是个二值化图)
        • lines: 储存着检测到的直线的参数对 (r,\theta) 的容器 * rho : 参数极径 r 以像素值为单位的分辨率. 我们使用 1 像素.
        • theta: 参数极角 \theta 以弧度为单位的分辨率. 我们使用 1度 (即CV_PI/180)
        • threshold: 要”检测” 一条直线所需最少的的曲线交点
        • srn and stn: 参数默认为0. 查缺OpenCV参考文献来获取更多信息.
      2. 通过画出检测到的直线来显示结果.

        for( size_t i = 0; i < lines.size(); i++ )
        {
          float rho = lines[i][0], theta = lines[i][1];
          Point pt1, pt2;
          double a = cos(theta), b = sin(theta);
          double x0 = a*rho, y0 = b*rho;
          pt1.x = cvRound(x0 + 1000*(-b));
          pt1.y = cvRound(y0 + 1000*(a));
          pt2.x = cvRound(x0 - 1000*(-b));
          pt2.y = cvRound(y0 - 1000*(a));
          line( cdst, pt1, pt2, Scalar(0,0,255), 3, CV_AA);
        }
        
    4. 统计概率霍夫线变换

      1. 首先, 你要执行变换:

        vector<Vec4i> lines;
        HoughLinesP(dst, lines, 1, CV_PI/180, 50, 50, 10 );
        

        带有以下自变量:

        • dst: 边缘检测的输出图像. 它应该是个灰度图 (但事实上是个二值化图) * lines: 储存着检测到的直线的参数对 (x_{start}, y_{start}, x_{end}, y_{end}) 的容器
        • rho : 参数极径 r 以像素值为单位的分辨率. 我们使用 1 像素.
        • theta: 参数极角 \theta 以弧度为单位的分辨率. 我们使用 1度 (即CV_PI/180)
        • threshold: 要”检测” 一条直线所需最少的的曲线交点 * minLinLength: 能组成一条直线的最少点的数量. 点数量不足的直线将被抛弃.
        • maxLineGap: 能被认为在一条直线上的亮点的最大距离.
      2. 通过画出检测到的直线来显示结果.

        for( size_t i = 0; i < lines.size(); i++ )
        {
          Vec4i l = lines[i];
          line( cdst, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0,0,255), 3, CV_AA);
        }
        
    5. 显示原始图像和检测到的直线:

      imshow("source", src);
      imshow("detected lines", cdst);
      
    6. 等待用户按键推出程序

      waitKey();
      

    结果

    Note

     

    得到的结果使用的是在上面 代码 部分提到的更高级版代码. 霍夫线变换的代码没有改变, 唯一不同的是在GUI的部分加入了活动条可动态改变阈值.输入图像为:

    Result of detecting lines with Hough Transform

    通过执行统计概率霍夫线变换我们能得到下面的结果:

    Result of detecting lines with Hough Transform

    当你使用滑动条来改变 阈值 的时候会观察到检测到线的数目的改变. 这是因为: 如果你设置了一个更大的阈值, 能检测到的线的数目将更少 (你需要更多的点来表示一条能检测到的直线).

    翻译者

    zhlifly@ OpenCV中文网站 <zhlifly@gmail.com>


    不同图像可以根据需要选择阈值,我将函数改动为:

    HoughLinesP(dst, lines, 1, CV_PI / 180, 110, 50, 10);

    更适合我的test图片。

    效果如下:




    展开全文
  • 这样的话你就可以使用一张图片作为表单的背景,从而起到美化表单的作用让文本框的边框变成条线body{background-color:#daeeff; /* 页面背景色 */}form{margin:0px; padding:0px;}.txt{color:#005...

    让文本框的边框变成一条线,很多朋友都喜欢把他的文本框变为一条横线, 体现个性。本例中还加入了背景透明,两者配合相信会有更加不错的效果。这样的话你就可以使用一张图片作为表单的背景,从而起到美化表单的作用

    让文本框的边框变成一条线

    body{

    background-color:#daeeff; /* 页面背景色 */

    }

    form{

    margin:0px; padding:0px;

    }

    .txt{

    color:#005aa7;

    border:0px;

    border-bottom:1px solid #005aa7; /* 下划线效果 */

    background-color:transparent; /* 背景色透明 */

    }

    .btn{

    background-color:transparent; /* 背景色透明 */

    border:0px; /*border:0px solid #005aa7;边框取消 */

    cursor:pointer;

    }

    用户名:

    密 码:

    展开全文
  • canvas02:使用canvas绘制直线

    千次阅读 2019-04-15 23:04:48
    在canvas01中,我们创建了个简单的canvas案例,现在我们在canvas中绘制直线。 步骤: 1.定义canvas工具 2.设置起始点坐标x,y (moveTo(x,y)) 3.移动到结束点x1,y1 (lineTo(x1,y1)) 4.设置直线宽度...
  • 二值化后,用canny边缘提取,然后用霍夫变换获得直线为一般方法。比如在图片中车道线提取上的应用。 1.2 二值化后,用横向和竖向的细长的条去腐蚀膨胀可以得到横线和竖线,拼在一起就是完整的表格框架。比如图片中...
  • Unity两点之间生成直线

    千次阅读 2020-06-15 12:02:24
    private void GetBetweenPoint(Transform target, Vector3 start,Vector3 end,float percent=1f) { Vector3 normal = (end - start).normalized; float distance = Vector3.Distance(start, end);...
  • 下面有9个点的图片。你能一笔画出4条直线连接着9个点,并且不重复任何条线吗?
  • 一根飞线的故事-SVG篇

    2019-09-19 11:27:04
    每年春运和双十一的统计图都因为有飞线动效才更加吸引眼球,今天要为大家带来一根漂亮飞线要用什么姿势生成才能。 SVG 本篇是主讲SVG来绘制飞线的,所以强大的SVG必定能完成我们绘制飞线效果的各种需求。首先我先为...
  • ![图片说明](https://img-ask.csdn.net/upload/201606/27/1466991230_94016.png) ![图片说明]...怎样在每组直线中找到直线,该直线在间距和倾斜上与相邻直线和谐一致
  • (给前端大全加星标,提升前端技能)作者:胖子https://zhuanlan.zhihu.com/p/67031777没有飞线的地图就像个发际线上移的中年人一样平淡无奇...
  • 经理让找找Silverlight实现画图的功能,找了老半天,根据前辈人的经验和思路自己汇总了个画图工具,基本上实现对图片的涂鸦、绘制图形、添加文本的功能,希望能对大家开发新的图片编辑器有所帮助,下面所以下我的...
  • Qt中绘制2D图形最核心的个类是QPainter。类QPainter是在设备类QPaintDevice上绘制几何图形(包括直线、曲线、圆形、弧形、矩形等等),其中设备类QPaintDevice的子类又有QWidget、QImage、QPictrue、QPixmap、...
  • ① 图像三角形主要由3根直线构成; ② 阈值化、skeleton提取骨架、将骨架(region)转为xld、将xld打散分割、筛选xld得到3条主xld、将这3条xld拟合成3条直线 。   效果分析: 这种算法虽然步骤简单,但是...
  • SVM(上):如何用一根棍子将蓝红两色球分开? SVM,叫做支持向量机,是最常见的一种分类方法,SVM是有监督的学习模型。 有监督的学习模型是指我们需要事先对数据打上分类标签,这样机器就知道这个数据属于哪个分类,...
  • hough变换中 `BW=rgb2gray(BW); thresh=[0.01,0.17]; ...但是我不想有这个步骤,我在输入图片是就灰度化二值化,保留一根黑色线条 直接带进最后一句,接着运行程序没有出结果,求解释和指导啊
  • 七年级下册数学第单元思维导图图片_七年级数学下册思维导图第五章 相交线与平行线思维导图???邻补角? ???两条直线相交??对顶角???????相交线????????两条直线被第??三垂条直直线所截(三线八角)?????内同 同错旁 位...
  • 直线霍夫变换笔记

    2020-03-10 00:03:55
    霍夫变换是种特征检测(feature extraction),被广泛应用在图像分析(image analysis)、计算机视觉(computer vision)以及数位影像处理(digital image processing)。霍夫变换是用来辨别找出物件中的特征,例如:...
  • 最近实验报告刚好要根据表格绘制频谱图,我现在还不会matlab和phython,没办法只好用excel绘制频谱图了,一开始我怎么调都没办法把柱子调成一条直线,...然后在excel柱状图中填充这条直线,柱子就变成了一根细线。 ...
  • 图片霍夫变换拟合得到直线后,怎样获得直线上的像素点坐标?  这是我今天在图像处理学习中遇到的问题,霍夫变换采用的概率霍夫变换,所以拟合得到的直线信息其实是直线的两个端点的坐标,这样个比较直接的思路就是...
  • 霍夫变换 霍夫变换是图像处理中的种特征提取技术,可以识别图像中的几何形状。它将图像空间中的特征...另直线提取的方法是对图像边缘点进行链码追踪,在得到的链码串中提取直线。 霍夫变换将在个空间中具有...
  • opencv图像处理,直线检测、圆检测、轮廓发现的基本操作。
  • 本文主要整理自笔者在项图像处理任务中的直线检测(line detection)部分的笔记资料,采用了基于霍夫变换(Hough Transform)的直线检测算法。文中给出了直线检测常用的算法介绍,论文资料等,以及笔者的实验笔记...
  • 刚毕业,公司要我做个视觉识别图片,用到了霍夫线变,直接上 第次写博客,不喜勿喷 先说下基本原理: 平时我们所常用的表示直线的方法是使用笛卡尔坐标系,也就是:y=kx+b 而霍夫线变则是使用的极坐标:r=xcos...
  • 左边界面为键入的直线信息,右边的界面显示画图效果。整个界面使用desiger新建 Main Window拖拽生成 UI界面。右边画图部分的实现使用paintEvent(QPaintEvent*)函数。由于paintEvent(QPaintEvent*)函数是QWidget类中...
  • 霍夫变换就是利用参数空间中的(ρ,θ)来表示直线,其中ρ是原点到直线的垂直距离,θ是原点到直线条垂线段与θ的夹角。通过几何的方法(添加辅助线,相似三角形来做),我们可以证明对于直线上的任何一点...
  • matlab绘制平行于坐标轴的直线

    千次阅读 2018-04-11 15:44:46
    有时候需要绘制平行于坐标轴的直线,那有没有什么简便的方法呢?通过在plot()函数加入参数就可以,代码如下:[plain] view plain copy x=0:0.1:2*pi; %x的取值生成 y=sin(x); %y=sin(x)函数 plot(x,y); %...
  • 参考文献: 霍夫线/圆变换从原理到源码详解 LSD直线检测和霍夫线变换的学习建议 Opencv源代码分析HoughLines 『OpenCV3』霍夫变换原理及实现
  • 计算两条直线之间的距离

    千次阅读 2015-12-05 18:55:19
    参考博客:... 计算图示两平行直线的距离 #include #include using namespace cv; using namespace std; int main() { //------------------------

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,935
精华内容 2,774
关键字:

一根直线图片