hough变换及OpenCVAPI

参考:https://blog.csdn.net/qq_15971883/article/details/80583364 

 

 

 

 

image: 必须是二值图像,推荐使用canny边缘检测的结果图像; 
rho: 线段以像素为单位的距离精度,double类型的,推荐用1.0 
theta: 线段以弧度为单位的角度精度,推荐用numpy.pi/180 
threshod: 累加平面的阈值参数,int类型,超过设定阈值才被检测出线段,值越大,基本上意味着检出的线段越长,检出的线段个数越少。根据情况推荐先用100试试
lines:这个参数的意义未知,发现不同的lines对结果没影响,但是不要忽略了它的存在 
minLineLength:线段以像素为单位的最小长度,根据应用场景设置 
maxLineGap:同一方向上两条线段判定为一条线段的最大允许间隔(断裂),超过了设定值,则把两条线段当成一条线段,值越大,允许线段上的断裂越大,越有可能检出潜在的直线段

 

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
#include <vector>
using namespace cv;
using namespace std;

Mat src, dst,dst2,gray_src;
char* INPUT_WIN = "input image";
char* OUTPUT_WIN = "binary image";
int t1_value = 50;
int max_value = 255;




int main()
{

    src = imread(".//pic//LDW.bmp");

    namedWindow(INPUT_WIN, CV_WINDOW_AUTOSIZE);
    imshow(INPUT_WIN, src);

    Mat src_gray;
    Canny(src, src_gray, 100, 200);
    cvtColor(src_gray, dst, CV_GRAY2BGR);
    imshow("edge image", src_gray);

    vector<Vec4f> plines;
    HoughLinesP(src_gray, plines, 1, CV_PI / 180.0, 50, 20, 10);
    Scalar color = Scalar(0,0,255);
    for (size_t i = 0; i < plines.size(); i++)
    {
        Vec4f hline = plines[i];
        line(dst, Point(hline[0], hline[1]), Point(hline[2], hline[3]), color, 3, LINE_AA);
    }

    imshow("直线检测", dst);

    waitKey(0);
    return 0; 
}

 

posted @ 2019-12-11 13:55  喵小喵~  阅读(351)  评论(0)    收藏  举报