我正在将一个使用OpenCV的Python程序翻译成带有Java绑定的C#。我使用相同的图像测试了Python和C#程序,我意识到findContours
方法在两个程序之间返回不同的轮廓。
Python:_, contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
C#:Imgproc.FindContours(edges, contours, hierarchy, Imgproc.RetrTree, Imgproc.ChainApproxSimple);
对于Python,我使用len(contours)
检查了C#contours.Count
,它们分别返回值94和106。我认为这可能是我翻译的程序中存在许多差异的原因,我不确定原因。我在这里做错了什么?
加载项:调用
Canny
之前调用下面的findContours
方法。之前的任何事情只是阅读图像,并将图像转换为灰色图像,因此grayImg
变量。
C#:Imgproc.Canny(grayImg, edges, 100, 200, 3, false);
Python:edges = cv2.Canny(gray, 100, 200, apertureSize = 3)
我之前认为这是因为不同的OpenCV版本,但我意识到两者都在使用OpenCV 3.除非{3.1}方法在3.1中不同于3.4,否则我会再次回到原点,因为我不喜欢知道问题的原因。
答案 0 :(得分:0)
我终于找到了这个现象的答案。 python程序使用OpenCV 3.4,而我的C#程序的Java绑定使用旧的OpenCV 3.1。 FindContours
方法可以在两个版本中找到,但显然会返回不同的值。