IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Opencv(C++)笔记--霍夫变换检测直线、霍夫变换检测圆 -> 正文阅读

[人工智能]Opencv(C++)笔记--霍夫变换检测直线、霍夫变换检测圆

目录

1--原理

2--Opencv API

3--实例代码

4--霍夫变换检测圆


1--原理

????????具体原理可参考?博客1?和?视频讲解1

? ? ? ? 霍夫变换检测直线的核心思想是:在笛卡尔坐标系下,一条直线(两个点(x1, y1)和(x2, y2)确定一条直线)可以变换为霍夫空间中的一个点(r, θ),由霍夫空间的一个点表示笛卡尔坐标系的一条直线

????????对于图像中的直线而言,其由许多个像素点组成;而笛卡尔坐标系中的像素点可以映射为霍夫空间中的一条直线(因为一个像素点可以组成无数条直线,每一条直线对应霍夫空间的一个点),即霍夫空间的一条直线,对应笛卡尔坐标系的一个点

? ? ? ? 对于霍夫空间中的每一条直线,其存在交点,霍夫空间的多条直线相交于一个交点,这个交点对应于笛卡尔坐标系下的一条直线,通过在霍夫空间中检测交点的个数确定交点的坐标(r, θ),可以检测笛卡尔坐标系下的直线。

2--Opencv API

3--实例代码

? ? ? ? ?进行霍夫变换直线检测时,通常配合 Canny边缘检测算法 进行,先对图片进行边缘检测,再进行直线检测;

# include <opencv2/opencv.hpp>
# include <cstdio>
# include <iostream>

int main(int argc, char** argv){
    cv::Mat src;
    src = cv::imread("C:/Users/Liujinfu/Desktop/opencv_bilibili/test_1218.jpg");
    if (src.empty()){
        printf("could not load image..\n");
        return -1;
    }
    cv::imshow("input", src);
    
    cv::Mat canny, dst;
    cv::Canny(src, canny, 150, 200); // 配合canny算法使用
    cv::cvtColor(canny, dst, cv::COLOR_GRAY2BGR); //灰度图转换为彩色图
    cv::imshow("edge", canny);

    std::vector<cv::Vec4f> plines;
    cv::HoughLinesP(canny, plines, 1, CV_PI / 180.0, 5, 0, 10);
    cv::Scalar color = cv::Scalar(0, 0, 255);
    for(size_t i = 0; i < plines.size(); i++){
        cv::Vec4f hline = plines[i];
        cv::line(dst, cv::Point(hline[0], hline[1]), cv::Point(hline[2], hline[3]), color, 3, cv::LINE_AA);
    }
    cv::imshow("output", dst);
    
    cv::waitKey(0);
    return 0;
}

4--霍夫变换检测圆

① 原理建议参考视频讲解2

② Opencv API

参数说明:

cv::InputArray image:表示输入图像;

cv::OutputArray circles:圆的参数,包含圆心坐标和圆的半径;

int method:采用的检测方法,默认使用霍夫梯度法;

double dp:累加器分辨率与图像分辨率的反比。dp=1表示累加器具有与输入图像相同的分辨率。

double minDist:标新两个圆心之间的最小距离;

double param1 = (100.0):表示边缘检测对应的参数。对于霍夫梯度法而言,表示为传递给canny边缘检测算子的高阈值,而低阈值则为高阈值的一半;

double param2 = (100.0):表示检测方法对应的参数。对于霍夫梯度法而言,表示在检测阶段圆心的累加器阈值。参数值越小就越可以检测出更多不存在的圆;反之,检测出的圆一般都很完美;

int minRadius = 0:表示半径的最小值;

int maxRadius = 0:表示半径的最大值;

③ 代码实例

# include <opencv2/opencv.hpp>
# include <cstdio>
# include <iostream>

int main(int argc, char** argv){
    cv::Mat src;
    src = cv::imread("C:/Users/Liujinfu/Desktop/opencv_bilibili/test_1221.jpg");
    if (src.empty()){
        printf("could not load image..\n");
        return -1;
    }
    cv::imshow("input", src);
    
    cv::Mat temp, gray, dst;
    
    cv::medianBlur(src, temp, 3); // 中值滤波去除噪声
    cv::cvtColor(temp, gray, cv::COLOR_BGR2GRAY); // 灰度化

    // 霍夫圆检测
    std::vector<cv::Vec3f> pcircles;
    cv::HoughCircles(gray, pcircles, cv::HOUGH_GRADIENT, 1, 20, 100, 100, 1, 100);

    src.copyTo(dst);
    for(size_t i = 0; i < pcircles.size(); i++){
        cv::Vec3f cc = pcircles[i]; // cc[0] -> x  cc[1] -> y  cc[2] -> r
        cv::circle(dst, cv::Point(cc[0], cc[1]), cc[2], cv::Scalar(0, 0, 255), 2, cv::LINE_AA); // 可视化圆弧 
        cv::circle(dst, cv::Point(cc[0], cc[1]), 1, cv::Scalar(255, 0, 0), 2, cv::LINE_AA); // 可视化圆心
    }
    cv::imshow("output", dst);

    cv::waitKey(0);
    return 0;
}

?

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 11:10:19  更:2022-12-25 11:14:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 19:47:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码