C# 如何在Emgu CV中使用CvInRange

C# 如何在Emgu CV中使用CvInRange,c#,emgucv,C#,Emgucv,我正在学习使用Emgu简历,偶然发现了这个开放式简历示例: 我想通过创建以下代码在Emgu中重新创建CvInRange函数: // create upper & lower limit (HSV) MCvScalar botLimit = new MCvScalar(20, 100, 100); MCvScalar uprLimit = new MCvScalar(30, 255, 255); // prepare the destination Image<Hsv, byte&

我正在学习使用Emgu简历,偶然发现了这个开放式简历示例:

我想通过创建以下代码在Emgu中重新创建
CvInRange
函数:

// create upper & lower limit (HSV)
MCvScalar botLimit = new MCvScalar(20, 100, 100);
MCvScalar uprLimit = new MCvScalar(30, 255, 255);

// prepare the destination
Image<Hsv, byte> imageHSVDest = new Image<Hsv, byte>(imageWidth, imageHeight);

// 
CvInvoke.cvInRange(imageHSV, botLimit, uprLimit, imageHSVDest);
//创建上限和下限(HSV)
MCvScalar botLimit=新的MCvScalar(20100100);
MCvScalar uprLimit=新MCvScalar(30,255,255);
//准备目的地
Image imageHSVDest=新图像(图像宽度、图像高度);
// 
CvInvoke.cvInRange(imageHSV、botLimit、uprimit、imageHSVDest);
CvInvoke.cvInRange()
生成此错误消息(在vs2010中):

错误1“Emgu.CV.CvInvoke.cvInRange(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr)”的最佳重载方法匹配项具有一些无效参数
错误2参数2:无法从“Emgu.CV.Structure.MCvScalar”转换为“System.IntPtr” 错误3参数3:无法从“Emgu.CV.Structure.MCvScalar”转换为“System.IntPtr”

似乎存在不匹配的数据类型。我搜索了如何将Emgu
MCvScalar
转换为
IntPtr
,但没有结果


通过翻译示例中的OpenCV
cvScalar(20100100)
,我使用了
MCvScalar
。这是错误的吗?

请改用Range中的内置Emgu CV功能。然后,它看起来是这样的:

Hsv lowerLimit = new Hsv(20, 100, 100);
Hsv upperLimit = new Hsv(30, 255, 255);

Image<Gray, byte> imageHSVDest = imageHSV.InRange(lowerLimit, upperLimit);
Hsv lowerLimit=新的Hsv(20100100);
Hsv上限=新Hsv(30、255、255);
Image imageHSVDest=imageHSV.InRange(下限,上限);

请注意,
imageshsvdest
是一个值为0(黑色)和255(白色)的二进制图像。

我使用的是Emgu CV 3.1.0。我偶然发现了一个与您类似的问题,我这样解决了它:

CvInvoke.InRange(imageHSV, new ScalarArray(new MCvScalar(20, 100, 100)), 
                           new ScalarArray(new MCvScalar(30, 255, 255)), imageHSVDest);
MCvScalar
不能直接用于
CvInvoke.InRange
中,因为后者接受
IInputArray
参数,因此必须用数组包装标量


参考:

忘了说我已经成功地完成了程序中的基本操作,如:打开图像,在imagebox中查看图像并将其转换为HSV颜色空间。