为什么 OpenCV findContour 方法总不能找到闭合的外轮廓?
Why doesn't OpenCV findContour method always find closed outer contour?
我有两张来自同一相机位置的图像。它们的区别在于,一个是正射拍摄的,一个是透视投影拍摄的。
这是两张图片:
当我运行 findContour OpenCV 方法时,结果如下:
为什么OpenCV找不到透视图的闭合外轮廓曲线?
我尝试了 CV_RETR_TREE 和 CV_RETR_EXTERNAL 标志以及 CV_CHAIN_APPROX_SIMPLE 和 CV_CHAIN_APPROX_NONE 标志的组合。
这是 findContour 方法的 documentation and sample code(我正在使用)。
实际上我无法重现您的问题。试试这个代码:
#include <opencv2\opencv.hpp>
#include <vector>
using namespace std;
using namespace cv;
int main()
{
RNG rng(1234);
Mat3b img = imread("path_to_image");
Mat1b gray;
cvtColor(img, gray, COLOR_BGR2GRAY);
Mat1b bw = ~gray;
vector<vector<Point>> contours;
findContours(bw, contours, RETR_LIST, CHAIN_APPROX_SIMPLE);
for (int i = 0; i < contours.size(); ++i)
{
Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
drawContours(img, contours, i, color, 2);
}
imshow("Result", img);
waitKey();
return 0;
}
结果:
我有两张来自同一相机位置的图像。它们的区别在于,一个是正射拍摄的,一个是透视投影拍摄的。
这是两张图片:
当我运行 findContour OpenCV 方法时,结果如下:
为什么OpenCV找不到透视图的闭合外轮廓曲线?
我尝试了 CV_RETR_TREE 和 CV_RETR_EXTERNAL 标志以及 CV_CHAIN_APPROX_SIMPLE 和 CV_CHAIN_APPROX_NONE 标志的组合。
这是 findContour 方法的 documentation and sample code(我正在使用)。
实际上我无法重现您的问题。试试这个代码:
#include <opencv2\opencv.hpp>
#include <vector>
using namespace std;
using namespace cv;
int main()
{
RNG rng(1234);
Mat3b img = imread("path_to_image");
Mat1b gray;
cvtColor(img, gray, COLOR_BGR2GRAY);
Mat1b bw = ~gray;
vector<vector<Point>> contours;
findContours(bw, contours, RETR_LIST, CHAIN_APPROX_SIMPLE);
for (int i = 0; i < contours.size(); ++i)
{
Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
drawContours(img, contours, i, color, 2);
}
imshow("Result", img);
waitKey();
return 0;
}
结果: