OPENCV 检测直线[opencv--3]

opencv中集成了很多好用的函数,比如霍夫变换检测直线的函数,当然,考虑到看我文章的人水平,我这里只讲讲如何使用这个函数,和怎么调节其中的参数

先把运行效果PO出来吧

cpp 复制代码
#include "CV_ERROR.h"
#include "MCV_funs.hpp"

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

int main() {
    cv::utils::logging::setLogLevel(cv::utils::logging::LOG_LEVEL_ERROR);
    // 读取PNG图像
    //cv::Mat image = cv::imread("lines.png", cv::IMREAD_COLOR);
    cv::Mat image = cv::imread("PIC.jpg", cv::IMREAD_COLOR);
    if (image.empty()) {
        std::cerr << "无法读取图像文件" << std::endl;
        return -1;
    }
    showimageWin(image);

    // 转换为灰度图像
    cv::Mat gray;
    cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);

    // 应用边缘检测(Canny)
    cv::Mat edges;
    cv::Canny(gray, edges, 150, 200, 3);

    showimageWin(edges);

    // 使用霍夫变换检测直线
    std::vector<cv::Vec2f> lines;
    cv::HoughLines(edges, lines, 0.5, CV_PI / 360, 200);


    // 在原图上绘制检测到的直线
    cv::Mat result = image.clone();
    for (size_t i = 0; i < lines.size(); i++) {
        float rho = lines[i][0], theta = lines[i][1];
        cv::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));
        cv::line(result, pt1, pt2, cv::Scalar(0, 255, 0), 15, cv::LINE_AA);
    }

    // 显示结果图像
    showimageWin(result);
    cv::waitKey();

    return 0;
}

下面是原理类的讲解,本鼠懒得重复做笔记了,直接PO在下面吧ψ(`∇´)ψ

相关推荐
蒸汽求职28 分钟前
机器人软件工程(Robotics SDE):特斯拉Optimus落地引发的嵌入式C++与感知算法人才抢夺战
大数据·c++·算法·职场和发展·机器人·求职招聘·ai-native
charlee4432 分钟前
最小二乘问题详解17:SFM仿真数据生成
c++·计算机视觉·sfm·数字摄影测量·无人机航测
Tanecious.1 小时前
蓝桥杯备赛:Day4-P9749 公路
c++·蓝桥杯
Fleshy数模1 小时前
OpenCV 实时人脸检测实战:从视频文件到人脸框标注
人工智能·opencv·计算机视觉
旖-旎1 小时前
分治(库存管理|||)(4)
c++·算法·leetcode·排序算法·快速选择算法
Tanecious.2 小时前
蓝桥杯备赛:Day3-P1102 A-B 数对
c++·蓝桥杯
Tanecious.2 小时前
蓝桥杯备赛:Day3-P1918 保龄球
c++·蓝桥杯
良木生香2 小时前
【C++初阶】:C++类和对象(下):构造函数promax & 类型转换 & static & 友元 & 内部类 & 匿名对象 & 超级优化
c语言·开发语言·c++
三雷科技3 小时前
使用 `dlopen` 动态加载 `.so` 文件
开发语言·c++·算法
Omics Pro4 小时前
虚拟细胞:开启HIV/AIDS治疗新纪元的关键?
大数据·数据库·人工智能·深度学习·算法·机器学习·计算机视觉