C ++和Python之间的轮廓差异

时间:2014-06-10 16:26:09

标签: python c++ opencv

我目前正在使用opencv来检测形状上的简单计数器。起初,我使用了c ++,一切运行良好。现在,我正在尝试使用Python,因为我需要在线使用它,并且轮廓检测似乎也不起作用。

这是我的c ++代码:

_src = cv::imread(_imagePath);
cv::Mat gray;
cv::cvtColor(_src, gray, CV_BGR2GRAY);
cv::Mat bw;
cv::Canny(gray, bw, 0, 50, 5);
cv::findContours(bw.clone(), allCountours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);

正如您所看到的,它非常简单,相同的代码是Python:

self._src = cv2.imread(self._imagePath)
gray = cv2.cvtColor(self._src, cv2.COLOR_BGR2GRAY)
bw = cv2.Canny(gray, 0, 50, 5)
allCountours, hierarchy = cv2.findContours(bw.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

为了显示结果,我在不同的轮廓上使用了随机颜色的drawcontours:

enter image description here

正如你所看到的,在c ++中,每个形状轮廓都被正确检测到,虽然它并不完美,但在Python中我有更多的轮廓。每次线断开时,都会检测到新的轮廓。知道如何解决这个问题吗?谢谢你!

1 个答案:

答案 0 :(得分:2)

C ++函数签名如下:     void Canny(InputArray image, OutputArray edges, double threshold1, double threshold2, int apertureSize=3, bool L2gradient=false )

对于Python,它是:     cv.Canny(image, edges, threshold1, threshold2, aperture_size=3) → None

如您所见,Python中的最后一个参数不可用。可能是它被设置为true的情况。你能试试吗?