无法使用OpenCV3找到轮廓,但代码可在OpenCV2上使用

时间:2018-06-21 09:28:17

标签: python opencv contour opencv-contour

这是无效的代码:

original_image = cv2.imread(test_image,cv2.IMREAD_GRAYSCALE);
bin_ada = cv2.adaptiveThreshold(original_image,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,43,0);
img,contours, hierachy = cv2.findContours(bin_ada,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE,(0,0));

这是起作用的代码:

original_image = cv2.imread(test_image,cv2.IMREAD_GRAYSCALE);
bin_ada = cv2.adaptiveThreshold(original_image,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,43,0);
contours, hierachy = cv2.findContours(bin_ada,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE,(0,0));

区别在于,第一个代码在Python3和较新的OpenCV库(3.4.1)中运行,而第二个代码在Python2和较旧的OpenCV库(2.4.5)中运行。

这是一个错误吗?还是有关于第一段代码为什么不起作用的简单解释?

错误是这样的:

OpenCV(3.4.1) /io/opencv/modules/imgproc/src/contours.cpp:1894: error: (-215) _contours.empty() || (_contours.channels() == 2 && _contours.depth() == 4) in function findContours

我将不胜感激

1 个答案:

答案 0 :(得分:1)

您不需要findContours的最后一个参数,它是一个偏移量,您将设置为(0,0)(如果需要偏移量,请使用offset =(y,x))。

此代码在python 3.6.3和opencv 3.4中有效

import cv2
import numpy as np

original_image = cv2.imread("./1.jpeg",cv2.IMREAD_GRAYSCALE);
bin_ada = cv2.adaptiveThreshold(original_image,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,43,0);
img,contours, hierachy = cv2.findContours(bin_ada,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE);