打靶识别(Opencv For Unity惊现bug)
在使用opencv for unity做图像处理的时候突然出现bug,就是读取工程目录下的图片时会无法读到图像,我使用的是Imgcodecs.imread(imgpath, 1),这一句语句来读图像,但发现读的图像都为空,百思不得其姐,然后偶然发现使用绝对路径的话就能够正常读取,读取一次之后再使用工程路径来读图像就没问题,我用的unity版本是5.6.1f1,opencv for unity版本是2.2.8,算是踩了个坑吧。。。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//opencv图像处理库
using OpenCVForUnity;
using System;public class top : MonoBehaviour {//左边图像UI对象,用于点击切换图像public Image icon;//图像路径文本public UnityEngine.UI.Text path;//打靶分数,一共十个public UnityEngine.UI.Text[] result = new UnityEngine.UI.Text[10];//总环数public UnityEngine.UI.Text grade;//平均环数public UnityEngine.UI.Text mean_grade;//剩余子弹数量public UnityEngine.UI.Text bull;//是否点击buttonbool isplay = false;//载入图像的载体Texture2D imshow;//对图像进行缩放Size image_size = new Size(512, 512);//红色画笔Scalar color = new Scalar(255, 0, 0);//中心靶坐标Point point = new Point(260, 297);//每一环离中心的位置double dis = 48f;// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}//点击button的触发函数public void top_button(){//控制点击的开关,不写也行,职业病。if (!isplay)isplay = true;elseisplay = false;//职业病if (isplay){//获取图像路径string imgpath = path.text;//原画读取图像Mat imgMat = Imgcodecs.imread(imgpath, 1);//将图像按比例缩小到512,512Imgproc.resize(imgMat, imgMat, image_size);//创建一个灰度图的载体Mat grayMat = new Mat();//将图像转成灰度图Imgproc.cvtColor(imgMat, grayMat, Imgproc.COLOR_RGB2GRAY);//图像宽高,其实都是512,但是职业病。int h = grayMat.rows();int w = grayMat.cols();//遍历图像像素点坐标x,yfor (int i = 0; i < h; i++){for (int j = 0; j < w; j++){//获取图像的像素值,灰度图值范围为0-255int pixe = (int)grayMat.get(i, j)[0];//判断值,如果接近黑色,将像素值修改为白色if (pixe < 15){grayMat.put(i, j, 255f);}//否则设置为黑色else{grayMat.put(i, j, 0f);}//因为图片集上打击位置为黑色,所以将黑色设置为目标白色信息//其余为不需要的信息设置为黑色去除掉}}////创建集合来保存弹孔位置的轮廓List<MatOfPoint> imgContours = new List<MatOfPoint>();//轮廓信息Mat hieMat = new Mat();//寻找图像轮廓Imgproc.findContours(grayMat, imgContours, hieMat, 0, 2);//用10减去轮廓数量为剩余子弹,放到text上显示出来bull.text = (10 - imgContours.Count).ToString();//定义一个总环数double all = 0f;//遍历轮廓(即每个弹孔)for (int i = 0; i < imgContours.Count; i++){//定义一个空坐标用于存放坐标位置Point point_grade = new Point();//弹孔半径float[] radius = new float[1];//在图像上给弹孔位置画上红色Imgproc.drawContours(imgMat, imgContours, i, color, 2);//获取弹孔位置Imgproc.minEnclosingCircle(new MatOfPoint2f(imgContours[i].toArray()), point_grade, radius);//给弹孔画上编号Imgproc.putText(imgMat, (i+1).ToString(), new Point(point_grade.x - 20, point_grade.y - 20), Core.FONT_HERSHEY_SIMPLEX, 0.5, new Scalar(255, 0, 0), 2, Imgproc.LINE_AA, false);//通过公式c~2 = a~2 + b~2,求弹孔与靶心距离double dis_bull = Math.Sqrt(Math.Pow(Math.Abs(point_grade.x - point.x), 2) + Math.Pow(Math.Abs(point_grade.y - point.y), 2));//成绩为10 - 距离除以环宽 + 1double grade_result = 10f - (dis_bull / dis) + 1;//给相应的textUI写上分数result[i].text = grade_result.ToString("f2");//累加分数all += grade_result;//E:/bbb/look1.jpg}//打印总分数grade.text = all.ToString("f2");//总分数除以子弹孔数为平均分数mean_grade.text = (all / imgContours.Count).ToString("f2");//定义一个贴图对象imshow = new Texture2D(imgMat.cols(), imgMat.rows());//将opencv读取的Mat对象转成贴图类型Utils.matToTexture2D(imgMat, imshow);//定义一个画布,将贴图内容放上去Sprite s = Sprite.Create(imshow, new UnityEngine.Rect(0, 0, imshow.width, imshow.height), Vector2.zero);//显示读取的图像icon.sprite = s;//职业病isplay = false;}}
}
打靶识别(Opencv For Unity惊现bug)相关推荐
- 我的世界服务器无限小号,我的世界惊现全新无限刷物品bug 服主大大都要注意了...
来源:游戏园日期:2019-06-22 04:04:15 我的世界惊现全新无限刷物品bug 服主大大都要注意了.那今天给大家分享一个玩家无意间发现的新的无限刷物品bug,而且还是在服务器中哦!那感兴趣 ...
- 王者荣耀服务器维护中有什么漏洞,王者荣耀:排位惊现漏洞,利用这个BUG一天上王者,三天登荣耀...
原标题:王者荣耀:排位惊现漏洞,利用这个BUG一天上王者,三天登荣耀 玩王者荣耀最让人头疼的事情是什么?不是上不去王者,而是在某个段位一直上下徘徊,相信有99%的玩家赞同小编的这种说法,因为往往在你连 ...
- 我的世界服务器怎么使用无限附魔bug,我的世界惊现全新无限刷物品bug 服主大大都要注意了...
我的世界惊现全新无限刷物品bug 服主大大都要注意了.那今天给大家分享一个玩家无意间发现的新的无限刷物品bug,而且还是在服务器中哦!那感兴趣的玩家不妨进来看看哦! 在一个rpg服务器玩 开小号召唤b ...
- 京东末位淘汰 10% 高管 ;聊天宝惊现大 Bug:用户可提现百万;斗鱼回应“人去楼空” | 极客头条...
「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流. 快讯速知 京 ...
- 我的世界服务器伤害增加bug,我的世界惊现全新无限刷物品bug 服主大大都要注意了...
来源:游戏园日期:2019-06-22 04:04:15 我的世界惊现全新无限刷物品bug 服主大大都要注意了.那今天给大家分享一个玩家无意间发现的新的无限刷物品bug,而且还是在服务器中哦!那感兴趣 ...
- TensorFlow惊现大bug?网友:这是逼着我们用PyTorch啊!
公众号关注 "视学算法" 设为"星标",第一时间知晓最新干货~ 转自:机器之心 参与:魔王.陈萍 诞生五年的 TensorFlow 出现大 bug,使用对应训练 ...
- TensorFlow惊现大bug?网友:这是逼着我们用PyTorch啊
诞生五年的 TensorFlow 出现大 bug,使用对应训练方式得到的模型甚至论文结果可能受到波及,然而相关 issue 提交 24 天后依然没有 TensorFlow 开发团队的处理.用户表示很失 ...
- 震惊: 2016民宅惊现千年小妖
震惊: 2016民宅惊现千年小妖 暨Unity免费直播公开课(续) 话说2016年某日突然闯入不明小妖,于是本人开始"捉妖记"历程,虽然历经千辛万苦,最终只逮住一只,请各位吃瓜群众 ...
- 极客日报:小米回应印度追缴税款;阿里回应达摩院副总裁王刚离职;iPhone日历App现Bug,多个国家地区无法显示2022年假期
一分钟速览新闻点! 阿里回应达摩院副总裁王刚离职:祝福王刚 6G网速大提升 中国团队创造太赫兹100Gbps传输新纪录 罗永浩名下已无被执行人信息 小米手机新专利获批:整个屏幕都能实现指纹识别 小米回 ...
最新文章
- 找出和为某个数的连续正整数序列
- p4 是否能自动merge
- java api文档_细说API – 文档和前后端协作
- java8默认垃圾回收器,Java 8的默认垃圾收集器
- 免费python全套视频教学-有哪些优质的Python全系列视频教程推荐,免费的收费的都可以?...
- 获取包名列表android,更多获取app包名方法
- java输出到窗口_如何将Java打印到窗口
- 高校科研管理系统源代码_教育领域各大高校如何建设智慧校园?你的学校够数字化吗?...
- 【人工智能】Astar算法求解8数码问题(QDU)
- SQL控制权力(DNC)与日志
- “D语言风采不再”的说法言过其实
- LGA1155、LGA1156、LGA1366、LGA2011的CPU插槽对应的都是什么型号的CPU
- 微信公众号01: ase实现access_token的存储和被动刷新
- 笔记2 IKAnalyzer扩展词库
- 微信公众号开发(五)个性化菜单
- SECCON-CTF-2014-Decrypt-It-easy
- synchronized同步机制——如果你愿意一层一层剥开我的心
- Inno Setup软件 打包多个安装包程序
- html查询一张表,HTML5数据查询,表格显示功能代码教程
- 如何注册小程序账号和下载小程序开发工具