空间皮肤代码_不废话,看我20行代码搞定色块提取与定位…….

e413f35fa5e85a8b89e81b2cd616d117.gif

点击上方蓝字关注我们

微信公众号:OpenCV学堂

关注获取更多计算机视觉与深度学习知识

问题来由

这个问题是谁问我的我已经不记得了,刚开始的时候他发了这张图像给我,让我给他看一下,我当时告诉他转换一下色彩空间提取就好啦,后来我记得他在微信上有问了我一次,今天我整理文件看到这张图又想起了,感觉他问了我好几次我都没回复挺不意思的,但是我实在不知道他是谁了,微信上消息太多,早已经把他淹没了,加之我记忆力退化严重,思来想去只好写篇文章告诉他,我回答了!如果看完感觉对你也有用,点在看支持即可!

先看看他发我的图像文件吧

69bd48112620b84fb757e443bde749ac.png

在来说说他的需求:

找到途中全部青色的区域,检测出来,绘制中心点!他用霍夫变换,结果直接翻车了,原因其实我很理解,这个图有很多梯度干扰,噪声干扰,用了肯定翻车!然后他就问我怎么办?

解题思路

直接转换到HSV色彩空间,得到如下结果:

017d0167aa0eaf285661863517d22474.png

然后我选择5x5的开操作,完成之后得到

53c7f8a586f315b18f5b68bbb11d243a.png

使用OpenCV轮廓发现,对轮廓拟合圆,求的圆心坐标得到输出结果如下:

f8c13199f0e6989106e1ff717e75883c.png

怎么样,效果好吗?

代码实现

上述步骤的代码演示,主要分为如下步骤

1.加载图像并转换到HSV色彩空间,得到mask
2.根据mask二值图像,进行形体学处理
3.使用轮廓发现,找到所有最外层轮廓
4.对轮廓进行圆拟合,得到圆心与半径,然后绘制

 代码如下:

 1#include 
2#include 
3
4using namespace cv;
5using namespace std;
6
7int main(int argc, char** argv) {
8    Mat image = imread("D:/images/zsxq/zsxq_20.png");
9    imshow("input", image);
10
11    // 色彩空间转换
12    Mat hsv, mask;
13    cvtColor(image, hsv, COLOR_BGR2HSV);
14    inRange(hsv, Scalar(40,43, 46), Scalar(50, 255, 255), mask);
15    imshow("mask", mask);
16    imwrite("D:/mask.png", mask);
17
18    // 形态学开操作
19    Mat se = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1));
20    morphologyEx(mask, mask, MORPH_OPEN, se);
21    imshow("binary", mask);
22    imwrite("D:/binary.png", mask);
23
24    // 轮廓发现
25    vector<vector> contours;26    vector hiearchy;27    findContours(mask, contours, hiearchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);28    for (int i = 0; i 29        // 圆拟合30        RotatedRect rrt = fitEllipse(contours[i]);31        Point ct = rrt.center;32        int h = rrt.size.height;33        int w = rrt.size.width;34        printf("height : %d, width : %d \n", h, w);35        circle(image, ct, 2, Scalar(0, 0, 255), 2, 8);36        circle(image, ct, (h + w) / 4, Scalar(255, 0, 0), 2, 8, 0);37    }3839    // 显示输出40    imshow("result", image);41    imwrite("D:/result.png", image);42    waitKey(0);43    return 0;44}45


希望他会看到,如果看到给我留言知道一下!最后跟大家道歉一下,代码超过20行了@_@!!!!

天下难事,必作于易

天下大事,必作于细

 推荐阅读 

OpenCV4系统化学习路线图-视频版本!

OpenCV单应性矩阵发现参数估算方法详解

单应性矩阵应用-基于特征的图像拼接

OpenCV图像拼接改进算法之完美拼接

OpenCV | 二值图像分析的技巧都在这里

OpenCV二值图像分析之形态学应用技巧

图像色彩空间与应用转换

五分钟学会C++高效图表绘制神器调用

没想到图像直方图有这么多应用场景

基于灰度共生矩阵(GLCM)的图像纹理分析与提取

OpenCV中一个最容易搞错的形态学操作

OpenCV实现皮肤表面粗糙度3D显示

解密 | OpenCV加载图像大小是有限制的 ?

8e3ba5be029a55502063fa9fbe1b34c8.png

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

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

相关文章

python字符串怎么表示_python中字符串的几种表达方式(用什么方式表示字符串)...

原博文 2018-11-21 18:45 − 说明: 今天在学习python的基础的内容,学习在python中如何操作字符串,在此记录下. 主要是python中字符串的几种表达&#xff0c;表示方式。 python的几种表达方式 1 使用单引号扩起来字符串 >>> my python lession #以单引号将字符串扩...0…

dw如何写php代码提示,DW CS5 jquery代码提示插件

喜欢使用Dreamweaver(业内简称dw)做php开发的朋友应该都知道dw是从6.0开始才支持jquery代码提示的。那么对于电脑上安装的是dw cs5而又需要jquery代码提示的该怎么办呢&#xff1f;将cs5卸了然后安装6吗&#xff1f;这个方法不是很妥&#xff0c;毕竟现在dw cs软件已经是几百兆…

flutter打包的app有多大_前端大势所趋---Flutter 这篇文章会让你行动起来

Flutter和原生APP的性能对比前言自从今年google IO大会推出flutter跨平台开发框架以来&#xff0c;flutter在各个技术论坛里被吵得如日中天。flutter团队直言flutter可以帮助开发者轻松实现恒定60fps的性能体验。我们知道flutter跨平台的原理是采用dart语言预编译的方式直接编译…

用java创建窗口程序,创建窗口的应用程序

创建窗口的应用程序通过前面的基础知识的学习&#xff0c;已经对ctypes库的基本功能学会了使用&#xff0c;为了加强这种知识训练&#xff0c;以及运用刚学习的知识的快乐&#xff0c;我们来创建一个稍稍复杂一点的应用程序。这个应用程序是所有后面应用程序的基础&#xff0c;…

python爬取b站排行榜_实时爬取B站排行榜并保存为表格——每周一个爬虫小教程系列...

从这周开始&#xff0c;每周来一个爬虫小教程&#xff0c;希望对你们有所帮助&#xff0c;这次的目标是B站排行榜至于爬取什么内容&#xff0c;目前感觉就把序号&#xff0c;名称以及评分爬取下来吧&#xff08;因为我是边写教程边写代码的&#xff09; 这次需要用到的知识&…

css 垂直居中_html中div使用CSS实现水平/垂直居中的多种方式

CSS中的居中&#xff0c;在工作中&#xff0c;会经常遇到。它可以分为水平居中和垂直居中&#xff0c;以下是几种实现居中的方式。以下例子中&#xff0c;涉及到的CSS属性值。.parent-frame { width: 200px; height: 200px; border: 1px solid red; } .child-frame { width…

php表白情话,朋友圈唯美表白短句情话 适合发朋友圈的情话

1、一个人经历了所有的苦难&#xff0c;也不要指望能和谁在一起&#xff1b;我曾经真诚的尝试过&#xff0c;但是结果我不想说。2、只要你愿意&#xff0c;只要我有&#xff0c;整个世界都是你的&#xff0c;而你只能是我的。3、只要你愿意&#xff0c;当你失落失意的时候&…

高德地图看各省分界线_深度解读|高德宣布高精地图“百元时代”背后的商业逻辑是什么...

车展前夕&#xff0c;高德的一次媒体沟通会&#xff0c;或许将为国内自动驾驶的发展带来深远影响。4月11日&#xff0c;高德地图在北京举行“高精宣言”媒体沟通会&#xff0c;表示将对高精地图服务进行升级&#xff0c;并以成本价格提供标准化高精地图&#xff0c;与合作伙伴分…

js获取ip地址_(原创)Node.JS实战31:大名鼎鼎的Express!

Express &#xff08;http://expressjs.com&#xff09;是Node.JS中一个简洁、灵活、强大的Web应用框架&#xff0c; 它提供了一系列强大特性&#xff0c;可以帮助我们快速创建各种Web 应用&#xff0c;也可用来编写各种的Web工具。Express博大精深&#xff0c;本文在此只做简单…

mysql跳过安全_Navicat连接MySQL数据库

前言:在使用Gin架构搭建博客的时候,需要设计数据库,以及连接数据库.命令端口操控效率实在是太低且不好管理,这个时候使用Navicat就能轻松高效的使用数据库了.步骤:下载安装Navicat,Mysql配置Mysql及其账号密码 Navicat连接Mysql1.下载安装Navicat,MysqlNavicat官网下载地址:…

java 切面_实用|AOP切面编程手段大汇总

点击上方"欧学长的架构成长之路" 关注我前言首先说一下什么是AOP&#xff1f;AOP就是面向切面编程&#xff0c;它是一个思想&#xff0c;通过切面&#xff0c;我们可以将那些反复出现的代码抽取出来&#xff0c;放在一个地方统一处理&#xff0c;提高代码的复用性。A…

php可以控制硬件吗,控制面板的作用是设置硬件接口吗?

错误&#xff0c;控制面板的作用是对系统进行有关的设置。控制面板是一个系统文件夹&#xff0c;用来提供各种对计算机系统进行设置和管理的工具&#xff1b;使用控制面板可以对系统进行设置与管理&#xff0c;例如设置系统环境参数的默认值和属性&#xff0c;添加新的应用程序…

不知道工作组名称怎样加入_剩米饭不知道怎样做?试试泡菜炒饭,再也不用担心米饭做多了...

剩米饭不知道怎样做&#xff1f;试试泡菜炒饭&#xff0c;再也不用担心米饭做多了东北的朋友这几天连续经历了春天&#xff0c;初夏和冬天&#xff0c;甚至在一天中看到了雪、雨和冰雹。这变化莫测的天气让大家一时间慌了神&#xff0c;不知到底要穿些什么。由于楼上都已经停了…

php元素浮动会产生哪些影响,css浮动带来什么问题

css浮动带来的影响&#xff1a;1、由于浮动元素脱离了文档流&#xff0c;所以父元素的高度无法被撑开&#xff0c;影响了与父元素同级的元素&#xff1b;若没有给父元素设置高度&#xff0c;那么父元素就不会在显示屏上显示。2、浮动元素不再占用原文档流的位置&#xff0c;它会…

linux将字符串转小写_小猿圈总结Linux常见命令(一)

科技发展的今天&#xff0c;互联网不断的发达&#xff0c;很多人学习Linux云计算的时候回因为记不住一些命令从而去找度娘&#xff0c;有时候因为因为找不到linux的命令而烦恼&#xff0c;下面是小猿圈linux讲师给大家总结的linux常见命令&#xff0c;希望对你有所帮助。1、cd命…

cnpm安装webpack_Webpack(一)介绍

一、Webpack是什么、为什么要使用它简单来说&#xff0c;Webpack是一个打包工具。站在2018年的角度&#xff0c;成为一个优秀的前端工程师&#xff0c;除了要会写页面样式和动态效果之外&#xff0c;还需要会用主流的单页面框架、Node.js、简单的前端的性能优化等等。加上现在一…

bytes数组转string指定编码_一篇文章弄懂Python中所有数组数据类型

前言数组类型是各种编程语言中基本的数组结构了&#xff0c;本文来盘点下Python中各种“数组”类型的实现。listtuplearray.arraystrbytesbytearray其实把以上类型都说成是数组是不准确的。这里把数组当作一个广义的概念&#xff0c;即把列表、序列、数组都当作array-like数据类…

sklearn保存svm分类模型_【菜菜的sklearn】07 支持向量机(上)

小伙伴们大家好~o(&#xffe3;▽&#xffe3;)ブ&#xff0c;我是菜菜&#xff0c;这里是我的sklearn课堂第7期&#xff0c;今天分享的内容是支持向量机&#xff08;上&#xff09;&#xff0c;下周还有下篇哦~我的开发环境是Jupyter lab&#xff0c;所用的库和版本大家参考&a…

unity 敌人自动攻击和寻路_Unity暑期萌新入门:环境篇

大家好&#xff0c;新一期又跟大家见面了。上一节我们完成了角色的移动控制&#xff0c;然而John只能在空白的场景中移动。因此接下来这一节我们将添加关卡、调节光照&#xff0c;让John来到阴森的鬼屋。然后设置NavMesh(导航网格&#xff0c;现在先听个概念就好)&#xff0c;为…

element 表格宽度自适应_Java 设置Word中的表格自适应的3种方式

概述在Word创建表格时&#xff0c;可设置表格“自动调整”&#xff0c;有3种情况&#xff0c;通过Java程序设置可调用相应的方法来实现&#xff0c;即&#xff1a;根据内容调整表格AutoFitBehaviorType.Auto_Fit_To_Contents根据窗口调整表格AutoFitBehaviorType.Auto_Fit_To_W…