当前位置: 首页 > news >正文

OpenCV_Code_LOG

孔洞填充

void fillHole(const Mat srcBw, Mat &dstBw)
{Size m_Size = srcBw.size();Mat Temp=Mat::zeros(m_Size.height+2,m_Size.width+2,srcBw.type());//延展图像srcBw.copyTo(Temp(Range(1, m_Size.height + 1), Range(1, m_Size.width + 1)));cv::floodFill(Temp, Point(0, 0), Scalar(255,255,255));Mat cutImg;//裁剪延展的图像Temp(Range(1, m_Size.height + 1), Range(1, m_Size.width + 1)).copyTo(cutImg);dstBw = srcBw | (~cutImg);
}
fillHole(ThrImg, ThrImg);
https://blog.csdn.net/wangyaninglm/article/details/47701047?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-47701047-blog-128034901.235^v43^pc_blog_bottom_relevance_base5&spm=1001.2101.3001.4242.1&utm_relevant_index=3

在这里插入图片描述



转换

16位转8位

cvtColor(OpenImage,OpenImage,COLOR_BGR2GRAY);

字符串转换

std::to_string(i)

 //生成随机颜色,用于区分不同连通域RNG rng(10086);Mat out;int number=connectedComponents(OpenImage,out,8,CV_16U);//统计图像连通域的个数vector<Vec3b>colors;for(int i=0;i<number;++i){//使用均匀分布的随机确定颜色Vec3b vec3=Vec3b(rng.uniform(0,256),rng.uniform(0,256),rng.uniform(0,256));colors.push_back(vec3);}//以不同颜色标记出不同的连通域Mat result=Mat::zeros(OpenImage.size(),SrcImage_1.type());int w=result.cols;int h=result.rows;for(int row=0;row<h;++row){for(int col=0;col<w;++col){int label=out.at<uint16_t>(row,col);if(label==0){//背景的黑色不改变continue;}result.at<Vec3b>(row,col)=colors[label];}}imshow("标记后的图像",result);

请添加图片描述

https://blog.csdn.net/qq_33287871/article/details/112691790

图像混合:

float alpha=0.5; Mat MixImage;
addWeighted(ConnectImg, alpha, SrcImage_1, 1 - alpha, 0, MixImage);

在这里插入图片描述

中值滤波(去二值化图像毛刺):

medianBlur(ConnectImg,ConnectImg,9);

在这里插入图片描述

https://ask.csdn.net/questions/375741

霍夫直线检测

//1、边缘检测
Canny(ConnectImg, CanImg, position, 255, 3);
imshow("CanImg", CanImg);vector<Vec4i> lines; // 存储检测到的直线
HoughLinesP(CloseImage, lines, 1, CV_PI / 180, 80, 30, 10); // 应用霍夫直线检测算法,输入图像必须是边缘检测后的图像 因为它需要的是边缘信息或者梯度信息来找到线段。
for (size_t i = 0; i < lines.size(); i++)
{Vec4i l = lines[i];line(SrcImage_1, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0, 0, 255), 3, LINE_AA); //直线必须画在三通道的RGB图像中
}
imshow("HoughSrcImage_1", SrcImage_1);

LSD直线检测
在这里插入图片描述


方法一:

#include <iostream>
#include <string>
#include "opencv2/core/core.hpp"
#include "opencv2/core/utility.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui/highgui.hpp"//1、边缘检测
Canny(ConnectImg, CanImg, 0, 255, 3);
imshow("CanImg", CanImg);Ptr<LineSegmentDetector> LS=createLineSegmentDetector(LSD_REFINE_STD); 
vector<Vec4f>lines_LSD;
LS->detect(CanImg,lines_LSD);
Mat drawLSDlines(CanImg);
LS->drawSegments(drawLSDlines,lines_LSD);
imshow("LSD",drawLSDlines);

在这里插入图片描述

方法二:

Ptr<LineSegmentDetector> detector = createLineSegmentDetector();vector<Vec4f> lines;
detector->detect(CanImg,lines);Mat resultLSD(CanImg.size(),CV_8UC3,Scalar(0, 0, 0));Scalar color(0,0,255);
int thickness = 1;
cout<<"lines.size : "<<lines.size();
for(int i=0; i<lines.size(); i++)
{Point start(static_cast<int>(lines[i][0]), static_cast<int>(lines[i][1]));Point end(static_cast<int>(lines[i][2]), static_cast<int>(lines[i][3]));line(resultLSD, start, end, color, thickness);
}
imshow("resultLSD", resultLSD);

点距离直线筛选(检查直线是否与圆相交)

在这里插入图片描述

bool isLineIntersectsCircle(const Vec4i& line, const Point& circleCenter, int circleRadius) {Point start(line[0], line[1]);Point end(line[2], line[3]);// 使用点到直线距离来判断是否相交double dist = pointToLineDistance(circleCenter, start, end);if (dist <= circleRadius) {return true;}// 补充:检查圆心是否在直线上(重要!)double dotProduct = ((end.x - start.x) * (circleCenter.x - start.x) + (end.y - start.y) * (circleCenter.y - start.y));double squaredLength = (end.x - start.x) * (end.x - start.x) + (end.y - start.y) * (end.y - start.y);if (squaredLength != 0) {double param = dotProduct / squaredLength;if (param >= 0 && param <= 1) {Point closestPoint;closestPoint.x = start.x + param * (end.x - start.x);closestPoint.y = start.y + param * (end.y - start.y);double distanceFromCenter = norm(circleCenter - closestPoint); //计算圆心到最近点的距离if (distanceFromCenter <= circleRadius) {return true;}}}return false;
}

函数调用:

   Point circleCenter1(140, 135); // 替换为你的圆心坐标(别忘了你图像缩小了6倍)Point circleCenter2(690, 72); // 替换为你的圆心坐标int circleRadius =60;//  使用 std::vector<int> 来存储与圆相交的第一条直线std::vector<int> intersectingLineIndices;for (size_t i = 0; i < extendedLines.size(); ++i) {if (isLineIntersectsCircle(extendedLines[i], circleCenter1, circleRadius)) {intersectingLineIndices.push_back(i);break; // 找到一条后立即退出循环,避免继续查找}}// 检验是否存在相交线if (!intersectingLineIndices.empty()) {int index = intersectingLineIndices[0];line(SrcImage_1, Point(extendedLines[index][0], extendedLines[index][1]),Point(extendedLines[index][2], extendedLines[index][3]), Scalar(0, 0, 255), 2);std::cout << "Found intersecting line at index " << index << std::endl;}else {std::cout << "No intersecting line found." << std::endl;}

相关文章:

OpenCV_Code_LOG

孔洞填充 void fillHole(const Mat srcBw, Mat &dstBw) {Size m_Size srcBw.size();Mat TempMat::zeros(m_Size.height2,m_Size.width2,srcBw.type());//延展图像srcBw.copyTo(Temp(Range(1, m_Size.height 1), Range(1, m_Size.width 1)));cv::floodFill(Temp, Point(…...

力扣第 74 题是 搜索二维矩阵

题目描述 给定一个 m x n 的矩阵 matrix 和一个目标值 target&#xff0c;请你编写一个函数来判断目标值 target 是否在矩阵中。 每行的元素按升序排列。每列的元素按升序排列。 示例 1 输入&#xff1a; matrix [[1, 4, 7, 11],[2, 5, 8, 12],[3, 6, 9, 16],[10, 13, 14…...

[极客大挑战 2019]BabySQL--详细解析

信息搜集 进入界面&#xff1a; 输入用户名为admin&#xff0c;密码随便输一个&#xff1a; 发现是GET传参&#xff0c;有username和password两个传参点。 我们测试一下password点位能不能注入&#xff1a; 单引号闭合报错&#xff0c;根据报错信息&#xff0c;我们可以判断…...

实现Linux平台自定义协议族

一 简介 我们常常在Linux系统中编写socket接收TCP/UDP协议数据&#xff0c;大家有没有想过它怎么实现的&#xff0c;如果我们要实现socket接收自定义的协议数据又该怎么做呢&#xff1f;带着这个疑问&#xff0c;我们一起往下看吧~~ 二 Linux内核函数简介 在Linux系统中要想…...

RL78/G15 Fast Prototyping Board Arduino IDE 平台开发过程

这是一篇基于RL78/G15 Fast Prototyping Board的Arduino IDE开发记录 RL78/G15 Fast Prototyping Board硬件简介&#xff08;背景&#xff09;基础测试&#xff08;方法说明/操作说明&#xff09;开发环境搭建&#xff08;方法说明/操作说明代码结果&#xff09;Arduino IDE RL…...

YOLOv11 NCNN安卓部署

YOLOv11 NCNN安卓部署 前言 yolov11 NCNN安卓部署 目前的帧率可以稳定在20帧左右&#xff0c;下面是这个项目的github地址&#xff1a;https://github.com/gaoxumustwin/ncnn-android-yolov11 上面的检测精度很低时因为这个模型只训练了5个epoch&#xff0c;使用3090训练一个…...

对载入的3dtiles进行旋转、平移和缩放变换。

使用 params: {tx: 129.75845, //模型中心X轴坐标&#xff08;经度&#xff0c;单位&#xff1a;十进制度&#xff09;//小左ty: 46.6839, //模型中心Y轴坐标&#xff08;纬度&#xff0c;单位&#xff1a;十进制度&#xff09;//小下tz: 28, //模型中心Z轴坐标&#xff08;高…...

Rust个人认为将抢占C和C++市场,逐渐成为主流的开发语言

本人使用C开发8年、C#开发15年、中间使用JAVA开发过项目、后期在学习过程中发现了Rust语言说它是最安全的语言&#xff0c;能够解决C、C的痛点、于是抽出一部分时间网上买书&#xff0c;看网上资料进行学习&#xff0c;这一学习起来发现和其它语言比较起来&#xff0c;在编码的…...

在openEuler中使用top命令

在openEuler中使用top命令 概述 top 命令是Linux系统中最常用的实时性能监控工具之一,允许用户查看系统的整体状态,包括CPU使用率、内存使用情况、运行中的进程等。本文档将详细介绍如何在openEuler操作系统中有效利用top命令进行系统监控。 启动top命令 打开终端并输入t…...

探索文件系统,Python os库是你的瑞士军刀

文章目录 探索文件系统&#xff0c;Python os库是你的瑞士军刀第一部分&#xff1a;背景介绍第二部分&#xff1a;os库是什么&#xff1f;第三部分&#xff1a;如何安装os库&#xff1f;第四部分&#xff1a;简单库函数使用方法1. 获取当前工作目录2. 改变当前工作目录3. 列出目…...

【小白学机器学习41】如何从正态分布的总体中去抽样? 获得指定正态分布的样本的2种方法

目录 1 目标&#xff1a;使用2种方法&#xff0c;去从正态分布的总体中去抽样&#xff0c;获得样本 1.1 step1: 首先&#xff0c;逻辑上需要先有符合正态分布的总体population 1.2 从总体中取得样本&#xff0c;模拟抽样的过程 2 从正态分布抽样的方法1 3 从正态分布抽样…...

将VSCode设置成中文语言环境

目录 VSCode默认是英文语言环境&#xff0c;这对于像我这种英语比较菜的人来说不是那么友好 另外也习惯了用中文&#xff0c;所以接下来介绍下如何将VSCode设置成中文语言环境。 1、打开VSCode软件&#xff0c;按快捷键【CtrlShiftP】 2、在弹出的搜索框中输入【configure l…...

Applied Intelligence投稿

一、关于手稿格式&#xff1a; 1、该期刊是一个二区的&#xff0c;模板使用Springer nature格式&#xff0c; 期刊投稿要求&#xff0c;详细期刊投稿指南&#xff0c;大部分按Soringernature模板即可&#xff0c;图片表格声明参考文献命名要求需注意。 2、参考文献&#xff…...

AI-agent矩阵营销:让品牌传播无处不在

矩阵营销是一种通过多平台联动构建品牌影响力的策略&#xff0c;而 AI-agent 技术让这一策略变得更加智能化。AI社媒引流王凭借其矩阵管理功能&#xff0c;帮助品牌在多个平台上实现深度覆盖与精准传播。 1. 矩阵营销的优势 品牌触达更广&#xff1a;多平台联动可以覆盖不同用…...

【0346】Postgres内核 Startup Process 通过 signal 与 postmaster 交互实现 (5)

1. Startup Process 进程 postmaster 初始化过程中, 在进入 ServerLoop() 函数之前,会先通过调用 StartChildProcess() 函数来开启辅助进程,这些进程的目的主要用来完成数据库的 XLOG 相关处理。 如: 核实 pg_wal 和 pg_wal/archive_status 文件是否存在Postgres先前是否发…...

NSSCTF-做题笔记

[羊城杯 2020]easyre 查壳&#xff0c;无壳&#xff0c;64位&#xff0c;ida打开 encode_one encode_tow encode_three 那么我们开始一步一步解密&#xff0c;从最外层开始 def decode_three(encrypted_str):decrypted_str ""for char in encrypted_str:char_code …...

【小白学机器学习35】数据表:整洁数据表,交叉表/列联表,以及两者转化pd.pivot_table()

目录 1 虽然这是个很基础的知识&#xff0c;但是我觉得有必要记录下 2 整洁数据表 3 交叉数据表的2种形式 3.0 交叉表的名字 3.1 2维的交叉表 3.2 用2维表现3维的 3.3 上述内容&#xff0c;具体的markdown文本 4 交叉数据表 4.1 交叉数据表并不整洁 4.2 但是交叉表也…...

springboot旅游管理系统的设计与实现

springboot旅游管理系统的设计与实现 如需源码pc端&#x1f449;&#x1f449;&#x1f449;资源 手机端&#x1f449;&#x1f449;&#x1f449;资源 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于…...

k8s 1.28 聚合层部署信息记录

–requestheader-client-ca-file –requestheader-allowed-namesfront-proxy-client –requestheader-extra-headers-prefixX-Remote-Extra- –requestheader-group-headersX-Remote-Group –requestheader-username-headersX-Remote-User –proxy-client-cert-file –proxy-cl…...

自由学习记录(25)

只要有修改&#xff0c;子表就不用元表的参数了&#xff0c;用自己的参数&#xff08;只不过和元表里的那个同名&#xff09; 子表用__index“继承”了父表的值&#xff0c;此时子表仍然是空表 一定是创建这样一个同名的变量在原本空空的子表里&#xff0c; 传参要传具体的变…...

热门AI命理工具盘点:星座、运势、排盘工具一次看

很多朋友对传统命理文化感兴趣&#xff0c;却怕找不对专业靠谱的工具&#xff0c;今天我们就整理了10款不同方向的AI命理相关工具&#xff0c;涵盖星座、面相、运势测算、专业排盘等不同需求&#xff0c;大家可以按需选择。 一、专业命理首选&#xff1a;天府 Agent 链接&#…...

AI合规 I 算法备案、大模型备案和登记的区别,双备案又是什么?

开头附上完整阅读链接&#xff1a;AI合规 I 算法备案、大模型备案和登记的区别&#xff0c;双备案又是什么&#xff1f;https://mp.weixin.qq.com/s/QjjnWhbeDvPGduz31O49dQ 公司马上要上线一个新的AI产品&#xff0c;但是突然发现&#xff1a;"我好像需要做备案&#xf…...

AI辅助开发:描述需求,快马AI自动生成旅行商问题算法与可视化

最近在做一个旅行商问题(TSP)的算法项目&#xff0c;想试试用AI辅助开发能有多高效。结果发现InsCode(快马)平台的AI功能真的帮了大忙&#xff0c;整个过程特别顺畅。这里分享一下我的体验。 需求分析阶段 刚开始我只是简单描述了需求&#xff1a;"需要一个用模拟退火算…...

FastAPI + TinyDB并发陷阱与实战:告别数据错乱的解决方案

核心摘要本文针对在FastAPI框架下使用TinyDB&#xff08;JSON文件数据库&#xff09;时遇到的并发写入数据冲突、错乱问题&#xff0c;深入浅出地解释了问题根源&#xff0c;并提供了从“文件锁”到“内存队列”再到“乐观锁”的三种由浅入深的实战解决方案&#xff0c;帮助你根…...

SEO_10个提升网站排名的实用SEO技巧分享(370 )

SEO:10个提升网站排名的实用SEO技巧分享 在当今的互联网时代&#xff0c;一个网站的成功离不开搜索引擎优化&#xff08;SEO&#xff09;。SEO不仅仅是一套技术&#xff0c;更是一种思维方式。本文将详细分享十个实用的SEO技巧&#xff0c;帮助你提升网站的排名&#xff0c;吸…...

MySQL 事务与并发控制:从日志底层到 MVCC 哲学

MySQL 事务与并发控制&#xff1a;从日志底层到 MVCC 哲学 文章目录 MySQL 事务与并发控制&#xff1a;从日志底层到 MVCC 哲学&#x1f4da; 课程大纲规划 &#x1f4d6; 第一讲&#xff1a;基础——事务概念与隔离级别1. &#x1f3ad; 并发带来的三大“幽灵”&#x1f47b; …...

突破百度网盘限速瓶颈:BaiduPCS-Go命令行客户端完全指南

突破百度网盘限速瓶颈&#xff1a;BaiduPCS-Go命令行客户端完全指南 【免费下载链接】BaiduPCS-Go iikira/BaiduPCS-Go原版基础上集成了分享链接/秒传链接转存功能 项目地址: https://gitcode.com/GitHub_Trending/ba/BaiduPCS-Go 你是否厌倦了百度网盘那令人抓狂的下载…...

SeqGPT-560M效果展示:跨句指代消解能力——‘该公司’→‘北京智云科技有限公司’

SeqGPT-560M效果展示&#xff1a;跨句指代消解能力——‘该公司’→‘北京智云科技有限公司’ 今天&#xff0c;我想和你聊聊一个在信息抽取领域里特别“聪明”的能力——跨句指代消解。听起来有点专业&#xff0c;对吧&#xff1f;别担心&#xff0c;我用大白话给你解释。 想…...

新手福音:在快马平台开启你的云端代码编程第一课

作为一名刚接触编程的新手&#xff0c;我最近发现了一个特别适合入门的学习方式——云端代码编程。以前总觉得学编程要先装一堆软件、配置环境&#xff0c;光是这些准备工作就能劝退不少人。但在InsCode(快马)平台上&#xff0c;这些烦恼都不存在了。 零门槛的编程初体验 打开平…...

LibreCAD:完全免费的2D CAD软件终极指南,告别昂贵许可证

LibreCAD&#xff1a;完全免费的2D CAD软件终极指南&#xff0c;告别昂贵许可证 【免费下载链接】LibreCAD LibreCAD is a cross-platform 2D CAD program written in C17. It can read DXF/DWG files and can write DXF/PDF/SVG files. It supports point/line/circle/ellipse…...