如下:
using UnityEngine;
using UnityEngine.UI;
using OpenCvSharp;
public class Circle_Text : MonoBehaviour
{
//このScriptはMainCameraにアタッチしてください
public RenderTexture renderTexture; //mainCameraにつけるRendertexture(アタッチしてね)
Texture2D kakunin, dstTexture;
Camera mainCamera;
Mat mats;
Vector3 Circle;
void Start()
{
//mainCamera = GetComponent<Camera>();
//kakunin = CreateTexture2D(renderTexture);
//Tex2D_to_Mat_show(kakunin);
}
private void Update()
{
mainCamera = GetComponent<Camera>();
kakunin = CreateTexture2D(renderTexture);
mats = Tex2D_to_Mat(kakunin);
HoughCircles(mats);
}
/// ここでTextur2Dに変換しているよ
/// </summary>
/// <param name="rt"></param>
/// <returns></returns>
Texture2D CreateTexture2D(RenderTexture rt)
{
//Texture2Dを作成
Texture2D texture2D = new Texture2D(rt.width, rt.height, TextureFormat.ARGB32, false, false);
//subCameraにRenderTextureを入れる
mainCamera.targetTexture = rt;
//手動でカメラをレンダリングします
mainCamera.Render();
RenderTexture.active = rt;
texture2D.ReadPixels(new UnityEngine.Rect(0, 0, rt.width, rt.height), 0, 0);
texture2D.Apply();
////元に戻す別のカメラを用意してそれをRenderTexter用にすれば下のコードはいらないです。
//mainCamera.targetTexture = null;
//RenderTexture.active = null;
return texture2D;
}
Mat Tex2D_to_Mat(Texture2D tex)
{
//Texture2D -> Mat
Mat srcMat = OpenCvSharp.Unity.TextureToMat(tex);
//Mat grayMat = new Mat();
//Cv2.CvtColor(srcMat, grayMat, ColorConversionCodes.RGBA2GRAY);
// Mat → Texture2D
//if (this.dstTexture == null)
//{
// this.dstTexture = new Texture2D(grayMat.Width, grayMat.Height, TextureFormat.RGBA32, false);
//}
//OpenCvSharp.Unity.MatToTexture(grayMat, this.dstTexture);
//// 表示
//GameObject.FindObjectOfType<RawImage>().texture = this.dstTexture;
return srcMat;
}
void HoughCircles(Mat Mat)
{
Mat dst = new Mat();
//1:因为霍夫圆检测对噪声比较敏感,所以首先对图像做一个中值滤波或高斯滤波(噪声如果没有可以不做)
Mat m1 = new Mat();
Cv2.MedianBlur(Mat, m1, 3); // ksize必须大于1且是奇数
//2:转为灰度图像
Mat m2 = new Mat();
Cv2.CvtColor(m1, m2, ColorConversionCodes.BGR2GRAY);
//3:霍夫圆检测:使用霍夫变换查找灰度图像中的圆。
/*
* 参数:
* 1:输入参数: 8位、单通道、灰度输入图像
* 2:实现方法:目前,唯一的实现方法是HoughCirclesMethod.Gradient
* 3: dp :累加器分辨率与图像分辨率的反比。默认=1
* 4:minDist: 检测到的圆的中心之间的最小距离。(最短距离-可以分辨是两个圆的,否则认为是同心圆- src_gray.rows/8)
* 5:param1: 第一个方法特定的参数。[默认值是100] canny边缘检测阈值低
* 6:param2: 第二个方法特定于参数。[默认值是100] 中心点累加器阈值 – 候选圆心
* 7:minRadius: 最小半径
* 8:maxRadius: 最大半径
*
*/
CircleSegment[] cs = Cv2.HoughCircles(m2, HoughMethods.Gradient, 1, 80, 70, 30, 50, 100);
Mat.CopyTo(dst);
// Vec3d vec = new Vec3d();
for (int i = 0; i < cs.Length; i++)
{
//画圆
Cv2.Circle(dst, (int)cs[i].Center.X, (int)cs[i].Center.Y, (int)cs[i].Radius, new Scalar(0, 0, 255), 2, LineTypes.AntiAlias);
//加强圆心显示
Cv2.Circle(dst, (int)cs[i].Center.X, (int)cs[i].Center.Y, 3, new Scalar(0, 0, 255), 2, LineTypes.AntiAlias);
}
// Mat → Texture2D
if (this.dstTexture == null)
{
this.dstTexture = new Texture2D(dst.Width, dst.Height, TextureFormat.RGBA32, false);
}
OpenCvSharp.Unity.MatToTexture(dst, this.dstTexture);
// 表示
GameObject.FindObjectOfType<RawImage>().texture = this.dstTexture;
Cv2.WaitKey(1);
//using (new Window("InputImage", WindowMode.AutoSize, dst))
//{
// Cv2.WaitKey(1);
//}
}
}
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru
我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa
我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_