C# 将颜色空间存储为EmguCV的变量
我试图为我的用户提供一个选项来切换检测是使用Bgr还是灰色空间进行优化 我看到这些选项的类型被称为“struct”,其名称空间为:C# 将颜色空间存储为EmguCV的变量,c#,emgucv,C#,Emgucv,我试图为我的用户提供一个选项来切换检测是使用Bgr还是灰色空间进行优化 我看到这些选项的类型被称为“struct”,其名称空间为: Emgu.CV.Structure.Gray or Emgu.CV.Structure.Gray 这是我目前的检测代码,你可以看到它目前只是使用灰色选项 while (!found) { timeTaken = Stopwatch.StartNew(); window = new Image<Gray, byte>(WindowO
Emgu.CV.Structure.Gray
or
Emgu.CV.Structure.Gray
这是我目前的检测代码,你可以看到它目前只是使用灰色选项
while (!found)
{
timeTaken = Stopwatch.StartNew();
window = new Image<Gray, byte>(WindowOperations.TakeScreenshot(focusWindow));
using (var result = window.MatchTemplate(detect, TemplateMatchingType.CcoeffNormed))
{
result.MinMax(out var minValues, out var maxValues, out var minLocations, out var maxLocations);
if (!(maxValues[0] > watchmanData.Profile.SettingsProfile.AccuracyDecimal)) continue;
found = true;
timeTaken.Stop();
}
}
while(!found)
{
所用时间=秒表.StartNew();
窗口=新图像(WindowOperations.TakeScreenshot(focusWindow));
使用(var result=window.MatchTemplate(detect,TemplateMatchingType.CcoeffNormed))
{
结果.MinMax(out-var-minValues、out-var-maxValues、out-var-minLocations、out-var-maxLocations);
如果(!(maxValues[0]>watchmanData.Profile.SettingsProfile.AccuracyCIMAL))继续;
发现=真;
耗时。停止();
}
}
理想情况下,我想要这样的东西(如果可能):
while(!found)
{
所用时间=秒表.StartNew();
色彩空间=用户选择;
窗口=新图像(WindowOperations.TakeScreenshot(focusWindow));
使用(var result=window.MatchTemplate(detect,TemplateMatchingType.CcoeffNormed))
{
结果.MinMax(out-var-minValues、out-var-maxValues、out-var-minLocations、out-var-maxLocations);
如果(!(maxValues[0]>watchmanData.Profile.SettingsProfile.AccuracyCIMAL))继续;
发现=真;
耗时。停止();
}
}
任何帮助都将不胜感激。问题是c#不允许您以您想要的方式使用变量类型参数。但是,您可以将代码分成如下类型的方法:
public void Process(bool useGray)
{
if (useGray)
{
DoStuff<Gray>(new Image<Gray, byte>(100, 100), new Image<Gray, byte>(10, 10));
}
else
{
DoStuff<Bgr>(new Image<Bgr, byte>(100, 100), new Image<Bgr, byte>(10, 10));
}
}
public void DoStuff<TColor>(Image<TColor, byte> window, Image<TColor, byte> pattern)
where TColor : struct, IColor
{
using (var result = window.MatchTemplate(pattern, TemplateMatchingType.CcoeffNormed))
{
result.MinMax(out var minValues, out var maxValues, out var minLocations, out var maxLocations);
//... evaluate matching
}
}
公共作废流程(bool-useGray)
{
如果(使用灰色)
{
DoStuff(新图像(100100),新图像(10,10));
}
其他的
{
DoStuff(新图像(100100),新图像(10,10));
}
}
公共无效DoStuff(图像窗口、图像图案)
其中TColor:struct,IColor
{
使用(var result=window.MatchTemplate(pattern,TemplateMatchingType.ccoeffNormad))
{
结果.MinMax(out-var-minValues、out-var-maxValues、out-var-minLocations、out-var-maxLocations);
//…评估匹配
}
}
public void Process(bool useGray)
{
if (useGray)
{
DoStuff<Gray>(new Image<Gray, byte>(100, 100), new Image<Gray, byte>(10, 10));
}
else
{
DoStuff<Bgr>(new Image<Bgr, byte>(100, 100), new Image<Bgr, byte>(10, 10));
}
}
public void DoStuff<TColor>(Image<TColor, byte> window, Image<TColor, byte> pattern)
where TColor : struct, IColor
{
using (var result = window.MatchTemplate(pattern, TemplateMatchingType.CcoeffNormed))
{
result.MinMax(out var minValues, out var maxValues, out var minLocations, out var maxLocations);
//... evaluate matching
}
}