零基础Opencv学习(三)

news2024/11/13 13:01:53
概述:主要目的是为了在图像中获取所需要的特征信息,比如直线或者圆等

一、标准霍夫变换 

      cv::Mat midImage, dstImage;
      /// 边缘检测 转化灰度图
      cv::Canny(image, midImage, 50, 200, 3);
      cv::cvtColor(midImage, dstImage, CV_GRAY2BGR);
      /// 进行霍夫线变换
      std::vector<cv::Vec2f> lines; ///存放得到线段矢量集合
      cv::HoughLines(midImage, lines, 1, CV_PI/180, 150, 0, 0);
      /// 绘制每条线段
      for(int 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(dstImage, pt1, pt2, cv::Scalar(0, 255, 0), 1, cv::LINE_AA);
      }

      cv::imshow("midImage", midImage);
      cv::imshow("dstImage", dstImage);

二、累计概率霍夫变换

      cv::Mat midImage, dstImage;

      /// 边缘检测 转化灰度图
      cv::Canny(image, midImage, 50, 200, 3);
      cv::cvtColor(midImage, dstImage, CV_GRAY2BGR);

      /// 霍夫线变换
      std::vector<cv::Vec4i> lines; ///存放得到线段矢量集合
      cv::HoughLinesP(midImage, lines, 1, CV_PI/180, 80, 50, 10);

      /// 绘制每条线段
      for(int i = 0; i<lines.size(); i++)
      {
          cv::Vec4i l = lines[i];

          cv::line(dstImage, cv::Point(l[0], l[1]), cv::Point(l[2], l[3]),cv::Scalar(0, 255, 0),1, cv::LINE_AA);
      }

      cv::imshow("midImage", midImage);
      cv::imshow("dstImage", dstImage);

总结:两种效果都不好,可能是我的图片太复杂了

好了,后面学习重映射、仿射变换

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2091859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity】简单机甲运动系统——坦克式操控方式

最近两天想做一个人形机甲的游戏&#xff0c;由于本人又是一个拟真军事爱好者&#xff0c;不太喜欢机动特别高的&#xff0c;所以打算参考坦克类游戏来制作一个脚&#xff01;踏&#xff01;实&#xff01;地&#xff01;的机甲游戏 这个运动系统基本实现了逻辑和动画的分离&a…

【Python系列】SQLAlchemy 基本介绍

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

详说 类和对象

类怎么定义 类是什么呢&#xff1f;类就是我们上篇文说的命名空间&#xff0c;单独创建一个域&#xff0c;自己有自己的生命空间&#xff0c;那么类怎么定义呢&#xff1f;C规定&#xff0c;假设 stack就是他的类名&#xff0c;那么前面要加个class&#xff0c;换行之后就是他…

软件测试面试八股文(含答案解析+文档)

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、软件测试基础面试题 1、阐述软件生命周期都有哪些阶段? 常见的软件生命周期模型有哪些? 软件生命周期是指一个计算机软件从功能确定设计&#xff0c;到…

如何在D盘创建虚拟环境?包括安装PyTorch和配置PyCharm

摘要&#xff1a;本文首先在D盘创建了虚拟环境&#xff0c;然后在虚拟环境中安装了PyTorch&#xff0c;最后配置了pycharm的解释器。 1. 在 D 盘创建虚拟环境 打开Anaconda Prompt 输入conda info --envs查看当前已有环境 创建自己的虚拟环境&#xff0c;打算命名为py310&…

一文彻底搞懂大模型 - GPT和LlaMA的模型架构

GPT vs LlaMA GPT与LlaMA&#xff0c;作为大语言模型的两大巨擘&#xff0c;均基于Transformer架构却各有千秋。GPT系列以强大的生成能力著称&#xff0c;通过不断增大的参数规模引领复杂语言与推理任务的前沿&#xff1b;而Llama则以开源姿态&#xff0c;通过技术创新提升模型…

江协科技stm32————10-5 硬件I2C读写MPU6050

步骤 一、配置I2C外设&#xff0c;对I2C2外设进行初始化&#xff08;MyI2C_Init&#xff09; 开启I2C外设和对应的GPIO口的时钟把I2C对应的GPIO口初始化为复用开漏模式使用结构体配置I2CI2C_Cmd,使能I2C I2C_GenerateSTART //生产起始条件 I2C_GenerateSTOP /…

MySQL:复合查询

MySQL&#xff1a;复合查询 聚合统计分组聚合统计group byhaving 多表查询自连接子查询单行子查询多行子查询多列子查询from子查询 合并查询unionunion all 内连接外连接左外连接右外连接全外连接 视图 MySQL 复合查询是数据分析和统计的强大工具&#xff0c;本博客将介绍如何使…

黑马点评——商户查询缓存(P37店铺类型查询业务添加缓存练习题答案)redis缓存、更新、穿透、雪崩、击穿、工具封装

文章目录 什么是缓存&#xff1f;添加Redis缓存店铺类型查询业务添加缓存练习题 缓存更新策略给查询商铺的缓存添加超时剔除和主动更新的策略 缓存穿透缓存空对象布隆过滤 缓存雪崩解决方案 缓存击穿解决方案基于互斥锁方式解决缓存击穿问题基于逻辑过期的方式解决缓存击穿问题…

【教程】实测np.fromiter 和 np.array 的性能

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 函数简介 np.fromiter np.array 测试代码 实验结果 结果分析 实验总结 学长想说 函数简介 np.fromiter np.fromiter 是 NumPy 提供的一…

【SuperCraft AI:无限工作流画布】

SuperCraft AI&#xff1a;无限工作流画布 SuperCraft 是一款全新的 AI 工具。它具有将手绘草图转换为不同产品图像的功能&#xff0c;提供了一个无限大的协作画布&#xff0c;让设计师能够在此手绘草图&#xff0c;并利用生成式 AI 技术将草图转化为高质量的 2D 图像和 3D 渲…

NC 二分查找-II

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 请实现有重复…

Unity TreeView扩展

实现效果 这里原来是做的一个检测网络、事件回调耗时的工具。简单改了成了一个演示TreeView的demo。实现了TreeView的基本功能并且实现了对列的排序。TreeView还可以制作点击&#xff0c;双击&#xff0c;右键等事件&#xff0c;但这里暂时不需要用到。 思维导图 工程&#xf…

arcgisjs4.0 内网部署字体不显示问题处理

问题背景问题定位解决方案 问题背景 内网环境&#xff0c;通过压缩包的hash值验证了包是一摸一样的&#xff0c;ningx也读到了index.html&#xff0c;但是网格的字提显示出不来&#xff0c;并且地图上的注记文字均不显示 本地环境地图情况&#xff1a; 内网环境地图情况&…

Bluetooth: att protocol

一篇搞懂 ATT 支持的东西都有什么。 READ_BY_GROUP_TYPE_REQ/RSP 如下是 Spec 内容: The attributes returned shall be the attributes with the lowest handles within the handle range. These are known as the requested attributes.If the attributes with the requeste…

石油设备和相关机械都包涵那些?

关键字&#xff1a;钻杆测径仪&#xff0c;泵管测径仪&#xff0c;固井管道直线度测量仪&#xff0c;输送管测径仪&#xff0c;输送管检测设备&#xff0c; 石油设备是指在石油和天然气的勘探、开发、生产、储存和运输等过程中使用的各种机械和装置。这些设备通常包括但不限于…

黄力医生科普:如何有效预防冠心病,这几个保健措施不可少!

冠心病&#xff0c;作为心血管系统的一种常见病&#xff0c;主要因冠状动脉粥样硬化导致管腔狭窄或闭塞&#xff0c;进而引发心肌缺血缺氧。此病多发于中老年群体&#xff0c;且具有一定遗传性。然而&#xff0c;无论发病因素如何&#xff0c;我们都可以通过一系列有效的预防措…

C++类和对象(6)——初始化列表

一般的初始化 class A { public:A(int a){ //一般的初始化&#xff0c;在{}括号里面给成员变量赋值_a a;cout << _a << endl;}~A() {}private:int _a; }; 用 初始化列表 初始化 当成员变量是以下两种情况时&#xff0c; 必须使用初始化列表&#xff01; cons…

单自由度无阻尼系统振动分析

特别感谢&#xff1a;https://www.bilibili.com/video/BV114411y7ab/?p6&spm_id_frompageDriver&vd_sourceebe07816bf845358030fc92d23830b29 本文图片该系列视频 tips&#xff1a;关于特征方程与振动方程&#xff1a; 特征方程有助于我们理解和确定系统的固有频率和模…

【算法】贪心算法解析:基本概念、策略证明与代码例题演示

文章目录 1. 什么是贪心算法&#xff1f;2. 贪心算法的特点3. 例题&#xff08;贪心策略&#xff09;① 找零问题② 最小路径和③ 背包问题 4. 贪心策略证明 1. 什么是贪心算法&#xff1f; 在学习贪心算法之前&#xff0c;一定要理解的是贪心策略&#xff1a; 贪心策略是一种…