unity图片相似度2

2023-10-30

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;

public class ContrastManager : MonoBehaviour
{

public static ContrastManager _instance;
/// <summary>
/// 添加被对比的图片
/// </summary>
public Texture2D LocalizeImage;
/// <summary>
/// 添加服务器比对图片
/// </summary>
public List<Texture2D> ServerImage = new List<Texture2D>();
/// <summary>
/// 存储哈希值与所对应的图片
/// </summary>
public Dictionary<string, Texture2D> NewHash = new Dictionary<string, Texture2D>();
private SimilarPhoto similarPhoto;
private ScrollRect MyScrollView;
public string NewHashValue;
void Start()
{
    _instance = this;
    MyScrollView = GameObject.Find("MyScrollView").GetComponent<ScrollRect>();
    similarPhoto = SimilarPhoto._Instance;
    //GetAllImageName(Application.persistentDataPath);
    AddLocalizeImage(SetReadWriteTrue(LocalizeImage));
    AddServerImag();
    AddHash();
}
/// <summary>
/// 用于手机端查找直接路径,通过图片名字加到链表内
/// </summary>
/// <param name="_MyPath"></param>
public void GetAllImageName(string _MyPath)
{
    Dictionary<string, string> imageFileDic = GetAllImagesFiles(_MyPath);
    foreach (var path in imageFileDic)
    {
        Texture2D tex = NativeGallery.LoadImageAtPath(path.Value, -1);
        tex.name = path.Key;
        ServerImage.Add(tex);
    }
    AddServerImag();
}
/// <summary>
/// 计算本地图片哈希值
/// </summary>
public void AddLocalizeImage(Texture2D texture)
{
    similarPhoto.SimilarPhotoHash.Clear();
    similarPhoto.StartUpLoadImageData(texture, 10);
    NewHashValue = similarPhoto.SimilarPhotoHash[0];
    Debug.Log("添加被对比的图片");
}
/// <summary>
/// 计算服务器图片链表哈希值
/// </summary>
public void AddServerImag()
{
    similarPhoto.SimilarPhotoHash.Clear();
    for (int i = 0; i < ServerImage.Count; i++)
    {
        similarPhoto.StartUpLoadImageData(SetReadWriteTrue(ServerImage[i]), 10);
        if (!NewHash.ContainsKey(similarPhoto.SimilarPhotoHash[i]))
        {
            NewHash.Add(similarPhoto.SimilarPhotoHash[i], ServerImage[i]);
        }
    }
    Debug.Log("添加比对图片");
}
/// <summary>
/// 添加本地与服务器图片对比
/// </summary>
public void AddHash()
{
    Texture2D texture2D = null;
    foreach (var item in NewHash)
    {
        NewHash.TryGetValue(item.Key, out texture2D);
        float f = similarPhoto.computeDistance(NewHashValue, item.Key) * 100;
        InstanceGO(texture2D, "相似度:" + f.ToString());
    }
    Debug.Log("对比相似度");
}
/// <summary>
/// 实例化
/// </summary>
/// <param name="texture2"></param>
/// <param name="value"></param>
public void InstanceGO(Texture2D texture2, string value)
{
    GameObject go = (GameObject)Instantiate(Resources.Load("images"), MyScrollView.content);
    RawImage Mytexture = go.transform.Find("RawImage").GetComponent<RawImage>();
    Text Mytexts = go.transform.Find("Text").GetComponent<Text>();
    Mytexture.texture = texture2;
    Mytexts.text = value;

}
/// <summary>
/// 获取全部的图片
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
private Dictionary<string, string> GetAllImagesFiles(string path)
{
    Dictionary<string, string> imagefilesDic = new Dictionary<string, string>();
    foreach (var file in Directory.GetFiles(path))
    {
        if (Path.GetExtension(file) == ".jpg" || Path.GetExtension(file) == ".AES" || Path.GetExtension(file) == ".png")
            imagefilesDic.Add(Path.GetFileNameWithoutExtension(file), file);
    }
    return imagefilesDic;
}
/// <summary>
/// 获取图片文件
/// </summary>
/// <param name="_MyPath"></param>
/// <returns></returns>
public Dictionary<string, string> GetImageFiles(string _MyPath)
{
    if (!Directory.Exists(_MyPath))
        return new Dictionary<string, string>();
    return GetAllImagesFiles(_MyPath);
}

public Texture2D SetReadWriteTrue(Texture2D texture)
{
    // 创建一个与纹理大小相同的临时渲染纹理
    RenderTexture tmp = RenderTexture.GetTemporary(
                 texture.width,
                 texture.height,
                 0,
                 RenderTextureFormat.Default,
                 RenderTextureReadWrite.Linear);
    Graphics.Blit(texture, tmp);
    // 备份当前设置的渲染纹理
    RenderTexture previous = RenderTexture.active;
    // 将当前渲染纹理设置为我们创建的临时纹理
    RenderTexture.active = tmp;
    // 创建一个新的可读的Texture2D来复制像素到它
    Texture2D myTexture2D = new Texture2D(texture.width, texture.height);
    // 将渲染纹理中的像素复制到新纹理中
    myTexture2D.ReadPixels(new Rect(0, 0, tmp.width, tmp.height), 0, 0);
    myTexture2D.Apply();
    //重置活动渲染纹理
    RenderTexture.active = previous;
    // 释放临时渲染纹理
    RenderTexture.ReleaseTemporary(tmp);
    Debug.Log("是否:" + myTexture2D.isReadable);

    return myTexture2D;
    // “myTexture2D”现在拥有与“纹理”相同的像素,而且是可读的。
}

//RenderTexture转Texture2D
//public Texture2D RenderTexture2Texture2D(RenderTexture rt)
//{
//    RenderTexture preRT = RenderTexture.active;
//    RenderTexture.active = rt;
//    Texture2D tex = new Texture2D(rt.width, rt.height, TextureFormat.ARGB32, false);
//    tex.ReadPixels(new Rect(0, 0, rt.width, rt.height), 0, 0);
//    tex.Apply();
//    RenderTexture.active = preRT;
//    Debug.Log(tex.isReadable);
//    return tex;
//}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unity图片相似度2 的相关文章

  • 游戏开发unity编辑器扩展知识系列:修改纹理资源的TextureType

    需要用TextureImporter导入资源 调用如下代码 TextureImporter importer TextureImporter TextureImporter GetAtPath path importer textureTy
  • Unity3d Terrain地形制作系列(一)

    游戏简单地形 地形制作 地形制作 第一步在场景里加载一个地形对象 第二步 我们在属性面板里找到绘制地形 然后选择Set Height 绘制高度 应该我们要制作低凹的效果 所有先让他有个高度 不然是不能实现低凹的效果 如图 我们然后选择绘制地
  • Unity中loading页加载的实现

    首先创建一个Global cs 使用单例用于存储场景的名字 便于后续脚本的调用 此脚本不必挂载在游戏物体上 using UnityEngine using System Collections public class Global Mon
  • Unity Animator 动画没切换

    恶魔射手 Survival Shooter 项目 有两个动画 一个是静止时的Idle 一个是走路时候的Move 如下图 设置好动画状态机后发现按方向键后还是Idle 没反应 而一直按着方向键后呢又动起来了 最后找到了真相 原来选中了 Has
  • Unity 粒子特效、材质发光 HDR ShaderGraph图文教程[完成lit发光设置]

    效果如图 准备工作 在hdr模式下 关闭Directional Light 相机设置 移动球挂一个点光源作为子节点 设置自行调节 0 创建移动球的材质及shader shader gt 在Project Create Shader Grap
  • unity中创建询问弹出窗口

    在开发过程中进程会遇到需要弹出一个窗口询问用户是否进行的操作 今天就来制作一个这样弹出窗口 然后根据弹出窗口的选择内容不同进行不同的操作 本例中主要是为了删除一个数据 而在删除数据操作前需要得到用户的一个确认操作 这里面主要用到了Notif
  • unity工程崩溃资源找回

    1 Unity死机未保存场景 当你在Unity中编辑场景 突然死机时 可以在项目文件目录中找到Temp文件夹 双击文件夹 找到 Backupscenes文件夹 把后缀为 backup的文件后缀改为 unity 然后拖进Unity的Proje
  • unity3d大型互动照片墙

    1 本次应客户需求 制作一个大型照片墙互动 输出分辨率为9600 4320 注 unity3d官方推荐最大分辨率为8192 3686 4 经过现场长达24小时暴力测试中途未发生问题 姑且判定可以达到正常标准 废话不多说 先上效果 unity
  • 【Unity】按Esc进入操作菜单

    本文章是基于如下视频的自我总结 https www youtube com watch v JivuXdrIHK0 步骤如下 1 在Canvas 界面添加一个Panel Panel中添加一个按钮 调整按钮的大小为合适大小 调整字体的大小为合
  • 【Unity步步升】监控与检测物体的各种方案,如:射线、碰撞、挂载等...

    在制作AR模型数值控制方案的时候遇到了检测的问题 学习过程受益匪浅 故今天为大家整理带来一篇监控与检测物体的参考方案集合 目录 一 射线检测 二 物体存在检测 三 碰撞检测 一 射线检测 单射线检测 首先完成搭建场景如下图1 1 我这里用到
  • unity3d切换场景Application.LoadLevel(1)含义

    Application LoadLevel 1 场景ID
  • Unity万向节死锁解决方案(2023/12/4)

    1 万向节死锁无法解决 这是因为它的特性就是如此 就像玻璃杯就是玻璃 这不可否认 别钻牛角尖昂 2 大多数情况下欧拉角足够用 例如 CF 摄像机不可能绕z轴旋转 x轴旋转也不会超过九十度 因为那样人物的腰子会被扭断 塔防游戏 保卫萝卜 吃鸡
  • 【转载】【Unity】WebSocket通信

    1 前言 Unity客户端常用的与服务器通信的方式有socket http webSocket 本文主要实现一个简单的WebSocket通信案例 包含客户端 服务器 实现了两端的通信以及客户端向服务器发送关闭连接请求的功能 实现上没有使用U
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜
  • U3D游戏开发中摇杆的制作(NGUI版)

    在PC端模拟摇杆 实现控制摇杆让玩家或者物体移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine public clas
  • 游戏开发常见操作梳理之NPC任务系统

    多数游戏存在任务系统 接下来介绍通过NPC触发任务的游戏制作代码 using System Collections using System Collections Generic using UnityEngine
  • 游戏开发创建操作之玩家信息系统的建立

    游戏一般都需要玩家信息系统 那么我们应该如何搭建玩家信息系统 接下来我将展示一种简单的方法 完整代码如下 using System Collections using System Collections Generic using Uni
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 游戏开发常见操作梳理之角色选择一

    进入游戏后 我们经常会进入角色选择的界面 通常是左右两个按钮可以更改角色供玩家选择 对于这种界面我们通常使用数据持久化将角色信息存储起来 接下来的笔记中 我将使用自带的数据持久化系统对其进行操作 实现角色的选择页面 后续会更新xml系列的文

随机推荐

  • Element ui多选框实现单选且隐藏全选按钮

    添加表格多选框列
  • Solidworks导出URDF总结(Noetic)

    环境 Solidwoks2018 SP0 Solidwoks2021 SP5 Ubuntu20 04 ROS1 Noetic Solidwoks2018 SP0对于平移副有问题 显示不出来 Solidwoks2021 SP5没有问题 官网有
  • windows bat批量创建文件夹与文件

    一 新建bat文件 批量创建 bat echo off for f i in nameList txt do mkdir i copy muban docx i i docx do mkdir i copy muban docx i i d
  • JDK历史所有版本下载地址(附Oracle帐号)

    由于有时在新的电脑或者服务器上需要安装新的JDK 但现在下载JDK已经没有之前方便了 需要登录才能下载 今天在这里我就来把jdk所有的版本下载地址与帐号列出来 方便大家下载 JDK所有版本下载地址 Java SE 14 Java SE 13
  • 逆向工具常用操作

    IDA 加载文件 Windows 下 用IDA加载文件之后 会在文件同目录下生成几个文件 id0 二叉树数据库 id1 文件包含描述每个程序字节的标志 nam 包含IDA Name 窗口的数据库 til 本地数据库有关信息 常用快捷键 快捷
  • 1120 哈夫曼树的创建遍历查找当前节点的编码

    package com import java util ArrayList import java util Collections import java util LinkedList import java util Stack 类
  • 阿里架构精心整理出来一份(Nginx实战.pdf)资料,请签收

    前言 Nginx 很火 因为它就像一个万能药 在任何存在性能需求的场合总能找见它的身影 它可以轻松在百万并发连接下实现高吞吐量的 Web 服务 同时 类似于 OpenResty 和 Tengine 这样的第三方模块群 进一步发展出了新生态
  • sql注入详解

    目录 前言 一 漏洞原因分析 二 漏洞危害 三 sql注入防范 四 如何挖掘sql注入漏洞 五 常见的注入手法 联合查询 union注入 报错注入 基于布尔的盲注 基于时间的盲注 HTTP头注入 宽字节注入 堆叠查询 二阶注入 六 sql注
  • ElsticSearch学习:ElasticSearch基本概念

    ElasticSearch肯定要和我们常用的MySQL这些关系型数据库对比 ES是面向文档的 下面是一个对比 关系型数据库 例如MySQL ElasticSearch 数据库 database 索引 indicies 表 tables ty
  • substr函数用法详解

    substr string start lt length gt 从string的start位置开始提取字符串 length 要提取字符串的长度 若length为以下任意条件之一时 返回start位置到串尾的所有字符 length不指定 l
  • 解决ubuntu(16.04版本)和windows电脑之间无法复制粘贴问题

    1 执行下列命令 sudo apt get autoremove open vm tools sudo apt get install open vm tools desktop 安装过程中 yes或者y一路通过 2 然后重启ubuntu就
  • 七夕王者服务器维护,2017年8月8日维护公告,七夕限量飞行祥瑞冰晶魅灵部分服务器放出...

    原标题 2017年8月8日维护公告 七夕限量飞行祥瑞冰晶魅灵部分服务器放出 亲爱的玩家朋友 为保证服务器的运行稳定和服务质量 梦幻西游 所有服务器将于2017年8月8日上午8 00停机 进行每周例行的维护工作 预计维护时间为上午8 00至9
  • db2常用的时间操作(数据库查询)

    请注意 使用时 请把文中空格替换 文中的空格有误 获取当前日期 select current date from sysibm sysdummy1 values current date 获取当前日期 select current time
  • onnx 模型转换与 onnxruntime 和caffe2 推理速度比较

    onnx 模型转换与 onnxruntime 和caffe2 推理速度比较 背景 1 模型转换 2 PC端运行onnx模型 背景 pytorch 模型通常包括网络结构 py文件和模型参数文件 pth 通常需要转换为onnx格式再向其他终端或
  • 【算法】广度/宽度优先搜索(BFS)

    挺好的一篇文章 讲的挺清楚 广度 宽度优先搜索 BFS 算法入门 郭志伟 SYSU raphealguo at qq com 2012 04 27 1 前言 广度优先搜索 也称宽度优先搜索 缩写BFS 以下采用广度来描述 是连通图的一种遍历
  • 针对VS2019无法登录问题

    摘要 针对VS2019无法登录问题提出一种可行有效的解决方法 VS2019在提供30天试用期后 会要求用户登录后才能使用 但VS2019提供的登录微软账户方法非常不友好 本文将通过更改登录设置方法实现VS2019的简单快捷登录 问题描述 一
  • dotNet基于office实现word转pdf

    20171228 WordToPdf byDotNet 基于Office的实现步骤 主要是利用了 office com 组件中的 Microsoft Office Interop word dll 动态链接库文件可以通过 c 代码实现对 w
  • 科普文章|通过Polkassembly平台使用MetaMask参与Moonbeam链上民主治理

    Moonriver上的Runtime 1200升级引入了一个民主预编译的功能 允许网络参与者使用MetaMask钱包参与链上治理投票 此外 近期Polkassembly与Mooriver集成 这是一个供任何人可以讨论并参与基于Substra
  • scala机器学习实战(一) 保险数据预测分析

    scala机器学习之保险数据预测分析 数据资料来源 此文章数据内容来源于Scala Machine Learning Projects 2018版 一书 本书分为是一个章节 本文章内容来自于第一章节 书本链接 Scala Machine L
  • unity图片相似度2

    using System Collections using System Collections Generic using System IO using UnityEngine using UnityEngine UI public