在使用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)相关推荐

  1. 我的世界服务器无限小号,我的世界惊现全新无限刷物品bug 服主大大都要注意了...

    来源:游戏园日期:2019-06-22 04:04:15 我的世界惊现全新无限刷物品bug 服主大大都要注意了.那今天给大家分享一个玩家无意间发现的新的无限刷物品bug,而且还是在服务器中哦!那感兴趣 ...

  2. 王者荣耀服务器维护中有什么漏洞,王者荣耀:排位惊现漏洞,利用这个BUG一天上王者,三天登荣耀...

    原标题:王者荣耀:排位惊现漏洞,利用这个BUG一天上王者,三天登荣耀 玩王者荣耀最让人头疼的事情是什么?不是上不去王者,而是在某个段位一直上下徘徊,相信有99%的玩家赞同小编的这种说法,因为往往在你连 ...

  3. 我的世界服务器怎么使用无限附魔bug,我的世界惊现全新无限刷物品bug 服主大大都要注意了...

    我的世界惊现全新无限刷物品bug 服主大大都要注意了.那今天给大家分享一个玩家无意间发现的新的无限刷物品bug,而且还是在服务器中哦!那感兴趣的玩家不妨进来看看哦! 在一个rpg服务器玩 开小号召唤b ...

  4. 京东末位淘汰 10% 高管 ;聊天宝惊现大 Bug:用户可提现百万;斗鱼回应“人去楼空” | 极客头条...

    「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流. 快讯速知 京 ...

  5. 我的世界服务器伤害增加bug,我的世界惊现全新无限刷物品bug 服主大大都要注意了...

    来源:游戏园日期:2019-06-22 04:04:15 我的世界惊现全新无限刷物品bug 服主大大都要注意了.那今天给大家分享一个玩家无意间发现的新的无限刷物品bug,而且还是在服务器中哦!那感兴趣 ...

  6. TensorFlow惊现大bug?网友:这是逼着我们用PyTorch啊!

    公众号关注 "视学算法" 设为"星标",第一时间知晓最新干货~ 转自:机器之心 参与:魔王.陈萍 诞生五年的 TensorFlow 出现大 bug,使用对应训练 ...

  7. TensorFlow惊现大bug?网友:这是逼着我们用PyTorch啊

    诞生五年的 TensorFlow 出现大 bug,使用对应训练方式得到的模型甚至论文结果可能受到波及,然而相关 issue 提交 24 天后依然没有 TensorFlow 开发团队的处理.用户表示很失 ...

  8. 震惊: 2016民宅惊现千年小妖

    震惊: 2016民宅惊现千年小妖 暨Unity免费直播公开课(续) 话说2016年某日突然闯入不明小妖,于是本人开始"捉妖记"历程,虽然历经千辛万苦,最终只逮住一只,请各位吃瓜群众 ...

  9. 极客日报:小米回应印度追缴税款;阿里回应达摩院副总裁王刚离职;iPhone日历App现Bug,多个国家地区无法显示2022年假期

    一分钟速览新闻点! 阿里回应达摩院副总裁王刚离职:祝福王刚 6G网速大提升 中国团队创造太赫兹100Gbps传输新纪录 罗永浩名下已无被执行人信息 小米手机新专利获批:整个屏幕都能实现指纹识别 小米回 ...

最新文章

  1. 找出和为某个数的连续正整数序列
  2. p4 是否能自动merge
  3. java api文档_细说API – 文档和前后端协作
  4. java8默认垃圾回收器,Java 8的默认垃圾收集器
  5. 免费python全套视频教学-有哪些优质的Python全系列视频教程推荐,免费的收费的都可以?...
  6. 获取包名列表android,更多获取app包名方法
  7. java输出到窗口_如何将Java打印到窗口
  8. 高校科研管理系统源代码_教育领域各大高校如何建设智慧校园?你的学校够数字化吗?...
  9. 【人工智能】Astar算法求解8数码问题(QDU)
  10. SQL控制权力(DNC)与日志
  11. “D语言风采不再”的说法言过其实
  12. LGA1155、LGA1156、LGA1366、LGA2011的CPU插槽对应的都是什么型号的CPU
  13. 微信公众号01: ase实现access_token的存储和被动刷新
  14. 笔记2 IKAnalyzer扩展词库
  15. 微信公众号开发(五)个性化菜单
  16. SECCON-CTF-2014-Decrypt-It-easy
  17. synchronized同步机制——如果你愿意一层一层剥开我的心
  18. Inno Setup软件 打包多个安装包程序
  19. html查询一张表,HTML5数据查询,表格显示功能代码教程
  20. 如何注册小程序账号和下载小程序开发工具

热门文章

  1. 一个动态计算京东金条利息的类 winform程序实例
  2. 六大常用分布的矩估计和最大似然估计推导过程
  3. 基于MatLab的PCA降维人脸识别系统(超详细解说)
  4. Docker快速上手篇,看这一篇就够,你先不用知道它是什么,先用起来!!!
  5. Word发布原图测试
  6. 根据先序遍历数列和中序遍历数列重建二叉树
  7. Cesium申请账号
  8. MSDN Windows XP with SP3 英文版下载
  9. yolov3-darknet中yolov2参数hier_thresh的意义及作用
  10. Great worker, Great work