opencv中的InRange方法与python / cv2和c#/ emgu有什么区别?

时间:2014-04-23 22:16:00

标签: c# python opencv emgucv

我正在尝试使用C#将一个小的opencv python脚本转换为emgu。

在python代码中

COLOR_MIN = np.array([104, 34, 255], np.uint8)
COLOR_MAX = np.array([124, 34, 255], np.uint8)
frame_threshed = cv2.inRange(hsv_img, COLOR_MIN, COLOR_MAX)
cv2.imshow("frame thresh", frame_threshed)

正确阈值cv2.imshow显示的图像。

我已将代码转换为C#,如下所示:

var min = new Hsv(104, 34, 255);
var max = new Hsv(124, 34, 255);
var thresh = hsvImg.InRange(min, max);
CvInvoke.cvShowImage("thresh", thresh);

此处仅绘制黑色图像 - 因此似乎没有任何东西与阈值匹配。

在这两种情况下,我都使用相同的.PNG文件作为输入。我在osx上编写了python代码,而.net代码在win8 VM中运行 - 这可能与颜色配置文件有关吗?

任何尝试让.NET版本正常工作的提示或事情都将非常感谢!!谢谢!

1 个答案:

答案 0 :(得分:1)

问题似乎是我正在使用较旧版本的emgu,并且正在使用emgu的2.4文档,其中上述应该有效。

在我使用的版本(2.2)中,以下作品:

var min = new Hsv(103, 33, 254);
var max = new Hsv(125, 35, 256);
var thresh = hsvImg.InRange(min, max);
CvInvoke.cvShowImage("thresh", thresh);

而不是通过< =和>来检查=它正在使用<和>。

在NuGet中意外点击错误的包是我的错...更多的理由总是使用命令行;)。