Opencv 如何寻找直线?

void findLine(const std::string file,std::double_t min_distance_value = 100.0)
{
    //https://github.com/opencv/opencv/blob/master/modules/imgproc/src/lsd.cpp
    auto lsd = cv::createLineSegmentDetector(
                    cv::LSD_REFINE_NONE
                );

    auto img = cv::imread(file,cv::IMREAD_GRAYSCALE);

    std::vector<cv::Vec4i> result;
    lsd->detect(img, result);
    lsd->drawSegments(img, result);

    for(int i = 0;i < result.size();++i){
        auto x1 = result[i][0];
        auto y1 = result[i][1];
        auto x2 = result[i][2];
        auto y2 = result[i][3];

        double distance_value = std::sqrt(std::pow((x1-x2),2) + std::pow((y1-y2),2));
        if(distance_value > min_distance_value){
            cv::line(img,cv::Point2i(x1,y1),cv::Point2i(x2,y2),cv::Scalar(0,0,255),3);
            qDebug() << x1 << x2 << y1 << y2;
        }
    }

    cv::namedWindow("FindLine", cv::WINDOW_GUI_EXPANDED);
    cv::imshow("FindLine", img);
    cv::waitKey(0);
}

原文地址:https://www.cnblogs.com/cheungxiongwei/p/12496950.html

时间: 2024-11-02 21:18:13

Opencv 如何寻找直线?的相关文章

OpenCV 学习(直线拟合)

OpenCV 学习(直线拟合) Hough 变换可以提取图像中的直线.但是提取的直线的精度不高.而很多场合下,我们需要精确的估计直线的参数,这时就需要进行直线拟合. 直线拟合的方法很多,比如一元线性回归就是一种最简单的直线拟合方法.但是这种方法不适合用于提取图像中的直线.因为这种算法假设每个数据点的X 坐标是准确的,Y 坐标是带有高斯噪声的.可实际上,图像中的每个数据点的XY 坐标都是带有噪声的. 下面就来讲讲适用于提取图像中直线的直线拟合算法. 一个点 (xi,yi) 到直线的距离用 ri 来

opencv —— convexHull 寻找并绘制凸包

凸包的定义: 包含点集 S 所有点的最小凸多边形称为凸包. 凸包绘制原理:Graham 扫描法 首先选择 y 方向上最低的点作为起始点 p0. 然后以 p0 为原点,建立极坐标系,做逆时针极坐标扫描,依次添加凸包点 p1,p2 ...pn(排序顺序根据极坐标角度大小) 若当前扫描点与下一个点构成的直线为逆时针转向,则将该点添加到凸包点集合,否则忽略. 寻找凸包:convexHull 函数 void convexHull(InputArray points, OutputArray hull, b

[OpenCV] 3、直线提取 houghlines

>_<" 发现一个好的链接,是一个讲openCV的网站:http://www.opencv.org.cn/opencvdoc/2.3.2/html/index.html >_<" 这次主要是houghlines变换来提取直线~ 1 #include "opencv2/highgui/highgui.hpp" 2 #include "opencv2/imgproc/imgproc.hpp" 3 #include <io

opencv —— minMaxLoc 寻找图像全局最大最小值

寻找最值:minMaxLoc 函数 minMaxLoc 函数的作用是在数组中找到全局最小和最大值. void minMaxLoc(InputArray src, double* minVal, double* maxVal = 0, Point* minLoc = 0, Point* maxLoc = 0, InputArray mask = noArray()); src,输入的数组,若是图像,需为单通道图像. minVal,返回最小值的指针.若无需返回,此值设为 NULL. maxVal,返

opencv各种绘图 直线 矩形 圆 椭圆

画图函数 (1)直线cvLine函数 其结构 void cvLine(//画直线 CvArr* array,//画布图像 CvPoint pt1,//起始点 CvPoint pt2,//终点 CvScalar color,//颜色 int thickness = 1,//宽度 int connectivity = 8//反走样 ); 实例代码 #include <cv.h> #include <highgui.h> #include <stdio.h> int main

OpenCV——霍夫变换(直线检测、圆检测)

x 1 #include <opencv2/opencv.hpp> 2 #include <iostream> 3 #include <math.h> 4 5 using namespace cv; 6 using namespace std; 7 8 9 int main(int argc, char** argv) 10 { 11 Mat src, src_gray, dst; 12 src = imread("test1.jpg"); 13 1

Python+OpenCV图像处理之直线检测

霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等). python实现 import cv2 import numpy as np # 使用霍夫直线变换做直线检测,前提条件:边缘检测已经完成 __author__ = "boboa" # 标准霍夫线变换 def line_detection_demo(image): gray = cv2.cvtColor(image, cv2.COLO

Python下opencv使用笔记(十一)(详解hough变换检测直线与圆)

在数字图像中,往往存在着一些特殊形状的几何图形,像检测马路边一条直线,检测人眼的圆形等等,有时我们需要把这些特定图形检测出来,hough变换就是这样一种检测的工具. Hough变换的原理是将特定图形上的点变换到一组参数空间上,根据参数空间点的累计结果找到一个极大值对应的解,那么这个解就对应着要寻找的几何形状的参数(比如说直线,那么就会得到直线的斜率k与常熟b,圆就会得到圆心与半径等等). 关于hough变换,核心以及难点就是关于就是有原始空间到参数空间的变换上.以直线检测为例,假设有一条直线L,

Python+OpenCV图像处理(十四)—— 直线检测

简介: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等).最基本的霍夫变换是从黑白图像中检测直线(线段). 2.Hough变换的原理是将特定图形上的点变换到一组参数空间上,根据参数空间点的累计结果找到一个极大值对应的解,那么这个解就对应着要寻找的几何形状的参数(比如说直线,那么就会得到直线的斜率k与常熟b,圆就会得到圆心与半径等等) 3.霍夫线变