无法使用 OpenCV3 找到轮廓,但代码可在 OpenCV2 上运行
Cannot find contours using OpenCV3 but code works on on OpenCV2
这是不起作用的代码:
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
如有任何帮助,我将不胜感激
您不需要 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);
这是不起作用的代码:
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
如有任何帮助,我将不胜感激
您不需要 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);