gpt4 book ai didi

c++ - OpenCV convexhull 没有给出正确的输出

转载 作者:行者123 更新时间:2023-11-28 02:25:59 27 4
gpt4 key购买 nike

这是我的输入二值图像:

enter image description here

现在我想用 OpenCV 得到它的凸包。为此,我编写了以下代码:

cv::Mat input = cv::imread("input.jpg", CV_LOAD_IMAGE_GRAYSCALE);
cv::vector<cv::vector<cv::Point>> contours;
cv::vector<cv::Vec4i> hierarchy;

// Find contours
cv::findContours(input, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);

// Find the convex hull
cv::vector<cv::vector<cv::Point>> hull(contours.size());
for(int i = 0; i < contours.size(); i++)
{
cv::convexHull(cv::Mat(contours[i]), hull[i], false);
}

cv::Mat drawing = cv::Mat::zeros(input.size(), CV_8UC3);
cv::Scalar color = cv::Scalar(0, 0, 255);
for (int j = 0; j < hull.size(); j++)
{
cv::drawContours(drawing, hull, j, color, 1, 8, cv::vector<cv::Vec4i>(), 0, cv::Point());
}

cv::imshow("Convex hull", drawing);
cv::waitKey();

这是输出:

enter image description here

但是在 Matlab 中,当我编写以下代码时:

input = imread('input.jpg');
[x, y] = find(input);
k = convhull(x, y);
plot(y(k), x(k), 'r-', y, x, 'b.');

这正是我想要的(红线代表我想要的凸包):

enter image description here

那么,我怎样才能在 OpenCV 中获得相同的结果呢?我应该在这里做错什么?谢谢。

最佳答案

可能这个答案来晚了,但对于那些仍在此处搜索的人来说,它已经晚了。

您不需要绘制等高线。只需使用 findNonZero() 方法从二进制图像中取出所有非零点,然后将 convexHull 应用于该组点。它将完美运行。

关于c++ - OpenCV convexhull 没有给出正确的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30660989/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com