OpenCVforUnity中识别图片中的基础图形

8 篇文章 3 订阅
订阅专栏

本文主要介绍了基于OpenCV识别圆形、正方形、长方形和三角形等基础图形的功能
原图

  • 图片导入

场景中创建RawImage组件,用来展示图片,创建PatternRecognation空物体,空物体上挂载新脚本shapeDectedScript.cs

public RawImage Pic; //UI
private Mat scrMat; //Mat格式存放处理的图片
//读取图片
scrMat = Imgcodecs.imread(Application.dataPath + "/Resources/FindingContours.png", 1);
//定义Texture2D设置其宽高随scrMat材质颜色模式为RGBA32
Texture2D texture = new Texture2D(scrMat.cols(), scrMat.rows(), TextureFormat.RGBA32, false);
//把Mat格式转换成texture格式
Utils.matToTexture2D(scrMat, texture);
//把texture贴在UI RawImage上
Pic.texture = texture;

在这里插入图片描述
此时图片与原图色彩不同原因是读取图片后色彩模式的设置问题

  • 图片处理
//图片颜色模式转换
Imgproc.cvtColor(scrMat, scrMat, Imgproc.COLOR_BGR2GRAY);

在这里插入图片描述

//图片高斯模糊处理
Imgproc.GaussianBlur(scrMat, scrMat, new Size(5, 5), 0);
//图片二值化处理
Imgproc.threshold(scrMat, scrMat, 128, 255, Imgproc.THRESH_BINARY);

在这里插入图片描述
处理后的图片只有黑白两个颜色,想要在图片上添加图形的文字描述需要再创建一个Mat用来显示OpenCV绘制后的图片。

private Mat dstMat; //Mat格式存放处理的图片
//读取图片
dstMat = Imgcodecs.imread(Application.dataPath + "/Resources/shapes_and_colors.jpg", 1);
//Imgproc.COLOR_BGR2RGB的颜色模式可以让图片保持原色
Imgproc.cvtColor(dstMat, dstMat, Imgproc.COLOR_BGR2RGB);

新建Mat后记得修改图片导入部分的格式转换此处scrMat修改为dstMat

//把Mat格式转换成texture格式(原)
Utils.matToTexture2D(scrMat, texture);

此处scrMat修改为dstMat

//把Mat格式转换成texture格式(修改后)
Utils.matToTexture2D(scrMat, texture);
  • 寻找轮廓
List<MatOfPoint> srcContours = new List<MatOfPoint>();
Mat srcHierarchy = new Mat();
//寻找轮廓
Imgproc.findContours(scrMat, srcContours, srcHierarchy, Imgproc.RETR_CCOMP, Imgproc.CHAIN_APPROX_NONE);
for (int i = 0; i < srcContours.Count; i++)
{
//轮廓描边
Imgproc.drawContours(dstMat, srcContours, i, new Scalar(255, 255, 255), 2, 8, srcHierarchy, 0, new Point());
Point point = new Point();
         float[] radius = new float[1];
//获取点集最小外接圆点
         Imgproc.minEnclosingCircle(new MatOfPoint2f(srcContours[i].toArray()), point, radius);
//在圆点位置绘制圆形
         Imgproc.circle(dstMat, point, 7, new Scalar(0, 0, 255), -1);

}
  • 比较图形
    创建一个函数detect()作为比较方法,根据轮廓点的个数推断图形
public string detect(MatOfPoint mp, MatOfPoint2f mp2f)
    {
        string shape = "unidentified";
        double peri;
//主要是计算图像轮廓的周长
        peri = Imgproc.arcLength(mp2f, true);
        //对图像轮廓点进行多边形拟合
        MatOfPoint2f polyShape = new MatOfPoint2f();
        Imgproc.approxPolyDP(mp2f, polyShape, 0.04 * peri, true);
        int shapeLen = polyShape.toArray().Length;

        //根据轮廓凸点拟合结果,判断属于那个形状
        switch (shapeLen)
        {
            case 3:
                shape = "triangle";
                break;
            case 4:
                OpenCVForUnity.Rect rect = Imgproc.boundingRect(mp);
                float width = rect.width;
                float height = rect.height;
                float ar = width / height;
                //计算宽高比,判断是矩形还是正方形
                if (ar >= 0.95 && ar <= 1.05)
                {
                    shape = "square";
                }
                else
                {
                    shape = "rectangle";
                }
                break;
            case 5:
                shape = "pentagon";
                break;
            default:
                shape = "circle";
                break;
        }
        return shape;
    }

之后我们只需要在描边找圆心之后加上图形对比就可以了,

MatOfPoint2f newMatOfPoint2f = new MatOfPoint2f(srcContours[i].toArray());
shape = shapeDector.detect(srcContours[i], newMatOfPoint2f);
//在图形圆心的(20,20)的右上方会绘制该轮廓的名字
Imgproc.putText(dstMat, shape, new Point(point.x - 20, point.y - 20), Core.FONT_HERSHEY_SIMPLEX, 0.5, new Scalar(255, 0, 0), 2, Imgproc.LINE_AA, false);

最终效果如下图
在这里插入图片描述

Unity3D 范围检测 扇形 圆形 矩形 等腰三角形
songhuanfei2017的博客
06-05 4942
代码如下: using UnityEngine; public class RangeCheck { //--扇形 public static bool CurveRange(Transform self, Transform target, float maxDistance, float maxAngle) { return CurveRange(...
opencv for Unity 2.3.9
10-22
OpenCV for Unity 2.3.9:开启图形学的新篇章》 Unity,作为一款广泛应用的游戏开发引擎,因其强大的跨平台能力和丰富的图形处理能力,深受开发者喜爱。而OpenCV,全称Open Source Computer Vision Library,是...
OpenCV For Unity (一)——识别图案形状
JLX_Sir的博客
09-13 3640
最近在研究OpenCV For Unity这个插件,但是不管是文的资料还是英文都是少之又少(可能是我没找到吧),所以希望记录一下自己学习的过程吧。 /// <summary> /// Mat格式存放处理的图片 /// </summary> private Mat _scrMat; /// <summary> /// Mat格式存放处理的图片 /// &lt
unity图像线条识别
08-29
图像线条识别
机器学习:opencv图像识别--图片运算、边界、阈值处理、平滑处理
最新发布
纸上得来终觉浅
09-04 2308
opencv图像识别--图片运算、边界、阈值处理、平滑处理
Unity3D 图像识别 人脸识别插件 OpenCV for Unity 2.2.1
12-13
Unity3D 图像识别 人脸识别插件 OpenCV for Unity 2.2.1
检测图片的简单几何图形,如三角形、圆形、矩形等
02-21
检测图片的简单几何图形,如三角形、圆形、矩形等
linux 图像识别 源码,unity图像识别OpenCV for Unity 2.3.0
weixin_36149065的博客
05-12 298
描述unity图像识别OpenCV for Unity 2.3.0所支持的Unity版本:5.6.6 及以上版本Works with Unity Cloud BuildiOS & Android supportWindows10 UWP supportWebGL supportWin & Mac & Linux Standalone supportPreview suppo...
opencvforunity最新版
05-09
网盘下载,opencvforunity最新版,专业图形工具,可用于人脸识别,人体识别,文字识别图片合成,包含人脸识别特征点的标识。
OpenCV for Unity 2.4.4
10-15
- **游戏开发**:利用 OpenCV for Unity 可以实现更加逼真的图形效果,如动态光照、阴影渲染等。 - **虚拟现实(VR)和增强现实(AR)**:通过实时图像处理和目标识别技术,可以极大地提高 VR 和 AR 应用的沉浸感。 ...
OpenCV for Unity 2.3.8.7z
09-03
OpenCV for Unity 2.3.8:在Unity实现高效计算机视觉功能》 OpenCV for Unity 2.3.8是一个专为Unity游戏引擎设计的插件,旨在为开发者提供强大的计算机视觉功能。该插件在2020年1月17日进行了更新升级,使得...
OpenCVForUnity摄像头识别
07-19
换脸,识别人脸
Unity+OPENCV 进行轮廓凸出
08-16
opencvsharp结合UNITY 进行轮廓凸出检测
OpenCVForUnity2.2.4
10-12
OpenCVForUnityUnity的应用非常广泛,比如开发基于面部表情识别的游戏、安全验证(例如面部解锁)、AR滤镜、虚拟试妆应用等。结合Unity的3D渲染能力,可以创建出富有创新性的视觉体验。 总结来说,OpenCVFor...
unity 图形识别_Unity 4:手机游戏的AAA图形和性能
culiao6493的博客
09-09 474
Hi from the Unity Mobile team, 您好,Unity Mobile团队, With Unity 4, you will have 10 platforms to which you can publish your awesome game. But in this blog, we’ll focus on the updates and new features f...
[Unity]OCR识别--OpenCV
PangCoder的博客
11-11 4188
Unity使用OCR技术大致会写三篇吧,主要是介绍一下OpenCV、例子里的OCRHMMDecoder和Tesseract。心急的同学可以直接跳过前两篇,直接看Tesseract。就当是我水个博客吧。
OpenCV | OpenCV检测图像轮廓
DrugAI
11-12 1546
步骤 读取图像为灰度图像。 使用cv2.threshold()函数获取阈值图像。 使用cv2.findContours()并传递阈值图像和必要的参数。 findContours()返回轮廓。您可以将其绘制在原始图像或空白图像上。 import cv2 import numpy as np img = cv2.imread('original.png', cv2.IMREAD_UNCHA...
HDevelop实现图片局部图形识别标记
吴镜的博客
10-01 4024
HDevelop实现简单的图像识别
Unity使用OpenCvSharp人脸识别
热门推荐
不忘初心 方得始终
06-11 1万+
效果图:代码:using UnityEngine; using System.Collections; using OpenCvSharp;public class VideoTest : MonoBehaviour { public WebCamTexture cameraTexture; Texture2D rt; public string cameraName = "
sed 用法
05-30
sed是一个流编辑器,用于对文本进行处理和转换。它可以读取文本文件,逐行处理并进行替换、删除、添加等操作。常用的一些sed用法如下: 1. 替换操作:将文件的某个字符串替换为另一个字符串。可以使用如下命令: ``` sed 's/old_string/new_string/g' file.txt ``` 其,s表示替换操作,old_string是要被替换的字符串,new_string是要替换成的字符串,g表示全局替换。 2. 删除操作:删除文件的某些行或者某些字符串。可以使用如下命令: ``` sed '/pattern/d' file.txt ``` 其,pattern是要被删除的字符串。 3. 插入操作:在文件的某些行或者某些字符串前面插入一些内容。可以使用如下命令: ``` sed '/pattern/i\insert_text' file.txt ``` 其,pattern是在哪个字符串前面插入,insert_text是要插入的内容。 4. 追加操作:在文件的某些行或者某些字符串后面追加一些内容。可以使用如下命令: ``` sed '/pattern/a\append_text' file.txt ``` 其,pattern是在哪个字符串后面追加,append_text是要追加的内容。 5. 多个操作:可以将多个操作组合在一起,使用如下命令: ``` sed -e 'operation1' -e 'operation2' file.txt ``` 其,operation1和operation2分别是要执行的操作。 以上是一些常用的sed用法,还有很多其他的用法,可以通过man sed命令查看帮助文档。
写文章

热门文章

  • OpenCVforUnity中识别图片中的基础图形 12311
  • OpenCVforUnity中的图片轮廓对比——MatchShapesExample案例 9802
  • BlendShape动画(Maya)导入Unity 8513
  • ShaderForge生长动画——基于模型UV生长 4166
  • OpenCVforUnity中Texture2D格式转换为OpenCV中的Mat格式——Texture2DToMatExample案例 3961

分类专栏

  • Unity 8篇
  • iOS 1篇

最新评论

  • BlendShape动画(Maya)导入Unity

    ddddddDDDDFDD: 萌新求助求助,导进unity后没有skinnedmeshrender属性和blendshape属性。

  • OpenCVforUnity中识别图片中的基础图形

    旧鑫跳ツ: 你好,楼主,请问shapeDector这个的定义是什么呢

  • OpenCVforUnity中的图片轮廓对比——MatchShapesExample案例

    中世纪游吟诗人: 案例源码就是对比图和原始图是一个图,在识别的轮廓外划线

  • OpenCVforUnity中识别图片中的基础图形

    JLX_Sir: 你好,请问你的OPenCV研究的怎么样了

  • OpenCVforUnity中的图片轮廓对比——MatchShapesExample案例

    last_fxlt: 我有点懵,对比结果是啥?

大家在看

  • Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while w
  • 谷歌app上架指南,2024年开发者账号与上包环境防关联问题分享! 171
  • 2024 年 MathorCup 数学应用挑战赛——大数据竞赛 赛道 B:电商品类货量预测及品类分仓规划 详细思路,matlab和python代码
  • Markdown语法详解及常见的使用场景
  • 【Python入门】初识Python 425

最新文章

  • Unity端 Android开发环境配置(window系统和macOS High Sierra系统)
  • Unity中动画倒播
  • ShaderForge生长动画——基于模型UV生长
2019年1篇
2018年7篇

目录

目录

评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家西平玻璃钢雕塑定制圣诞风格商场美陈中庭商场美陈费用咸阳精致的商场美陈广东商场美陈价钱陕西水果玻璃钢雕塑哪家便宜狗玻璃钢卡通雕塑定制景观玻璃钢雕塑造价江西玻璃钢雕塑艺术品福建超市商场美陈哪家好园林景观雕塑石灯玻璃钢雕塑眉山商场美陈湖北动物玻璃钢雕塑价位玻璃钢花盆哪里买玻璃钢雕塑招牌字哪家好玻璃钢雕塑哪里买欧式墙面玻璃钢雕塑商场中庭美陈须知模板开远市玻璃钢雕塑设计供应商福州景区玻璃钢雕塑公司欧式玻璃钢雕塑方法贵州玻璃钢校园雕塑江苏艺术商场美陈研发仿真玻璃钢人物雕塑销售厂家滁州玻璃钢景观雕塑设计大同仿铜玻璃钢雕塑定制湛江玻璃钢雕塑货源充足大象玻璃钢雕塑工厂广东大型玻璃钢雕塑哪家便宜浙江室内商场美陈订购香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化