OpenCV 霍夫变换

原创 2016年08月30日 22:21:37

一. 实验内容

用OpenCV的霍夫变换来检测图片中的直线和圆。

二. 实验代码

//霍夫变换
class Task18 {
public:
    void deal() {
        Mat src_img = imread("img\\4.jpg");

        imshow("霍夫变换[原图]", src_img);

        Mat gray_img;
        cvtColor(src_img, gray_img, COLOR_BGR2GRAY);

        Mat mid_img;
        Canny(gray_img, mid_img, 50, 200, 3);
        imshow("边缘检测", mid_img);

        vector<Vec2f> lines1;

        HoughLines(mid_img, lines1, 1, CV_PI / 180, 150, 0, 0);

        Mat out1;
        out1.create(gray_img.size(), gray_img.type());
        for (int i = 0; i < lines1.size(); ++i) {
            double rho = lines1[i][0], theta = lines1[i][1];
            Point p1, p2;
            double a = cos(theta), b = sin(theta);
            double x0 = a * rho, y0 = b * rho;
            p1.x = cvRound(x0 + 1000 * (-b));
            p1.y = cvRound(y0 + 1000 * a);
            p2.x = cvRound(x0 - 1000 * (-b));
            p2.y = cvRound(y0 - 1000 * a);
            line(out1, p1, p2, 255, 1, LINE_AA);
        }

        imshow("霍夫变换[效果图1]", out1);

        vector<Vec4i> lines2;
        Mat out2;
        out2.create(gray_img.size(), gray_img.type());
        HoughLinesP(mid_img, lines2, 1, CV_PI / 180, 80, 50, 10);
        for (int i = 0; i < lines2.size(); ++i) {
            Vec4i l = lines2[i];
            line(out2, Point(l[0], l[1]), Point(l[2], l[3]), 255, 1, LINE_AA);
        }
        imshow("霍夫变换[效果图2]", out2);

        Mat src_img2 = imread("img\\5.jpg");
        imshow("霍夫圆变换[原图]", src_img2);
        Mat gray_img2;
        cvtColor(src_img2, gray_img2, COLOR_BGR2GRAY);
        GaussianBlur(gray_img2, gray_img2, Size(3, 3), 2, 2);

        vector<Vec3f> circles;
        HoughCircles(gray_img2, circles, HOUGH_GRADIENT, 1.5, 10, 200, 100, 0, 0);

        Mat out3;
        out3.create(gray_img2.size(), gray_img2.type());
        for (int i = 0; i < circles.size(); ++i) {
            Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
            int radius = cvRound(circles[i][2]);
            circle(out3, center, radius, 255, 3, 8, 0);
        }
        imshow("霍夫圆变换[效果图]", out3);

        waitKey(0);
    }
};

三. 实验结果

这里写图片描述

版权声明:by whai

OpenCV霍夫变换识别圆

打算用openCV的 cvHoughCircles去识别实心的黑圆。但是cvHoughCircles的效果并不好,会检测出很多并不存在的拟合圆。因此还需在霍夫变换的基础上限定一些条件,对识别出的圆进行...

霍夫变换直线检测及opencv实现

导读: 1. houghlines的算法思想 2. houghlines实现需要考虑的要素 3. houghlines的opencv实现,代码分析 4. houghlines的效率分析,改进 ...

基于OpenCV实现霍夫变换

霍夫变换概述霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特征的集合作为霍夫变换的结果。霍夫线检测霍夫线变换...

opencv3累计概率霍夫变换-HoughLinesP函数

#include #include #include using namespace std; using namespace cv; int g_CannyThred = 150, g_Cann...

Verybot之OpenCV应用二:霍夫变换查找圆

其实我是想通过这个程序来测试一下,OpenCV在机器人上跑得怎么样,霍夫变换的原理就不多说了,下面是程序: #include "cv.h" #include "highgui.h" #include ...

OpenCV_(HougLines transform)霍夫变换检测直线

cv::HoughLines(contours, lines, 1, PI / 180, 150);

opencv 霍夫变换cvHoughLines2 cvHoughCircles cvApproxPoly

opencv cvHoughLines2 cvHoughCircles cvApproxPoly demo: http://download.csdn.net/detail/keen_zuxwan...

霍夫变换检测直线的公式推导以及基于opencv的源代码分析并实例实现

参考: http://blog.csdn.net/jia20003/article/details/7724530 http://blog.csdn.net/viewcode/article/deta...

【OpenCV】基于傅立叶变换和霍夫变化的文本倾斜校正

//此函数应用傅立叶变换进行原始图像倾斜校正 IplImage* mycvRotateImage(const IplImage* src) { int op_width = cvGetOpt...

opencv 霍夫变换检测圆环

Hough 圆环变换
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenCV 霍夫变换
举报原因:
原因补充:

(最多只允许输入30个字)