Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python openCV绘制轮廓的更好方法_Python_Opencv - Fatal编程技术网

Python openCV绘制轮廓的更好方法

Python openCV绘制轮廓的更好方法,python,opencv,Python,Opencv,我使用openCV网站上提供的代码,根据ROI直方图检测到了手,这就是我得到的结果 基于这个结果,我想画轮廓,但结果图像不是我未来处理所需的图像。 我需要做什么才能有一个更平滑的轮廓?谢谢 您的图像有太多的“洞”。试试看 这是C++代码,但您可以轻松地将其移植到Python。您可能需要稍微调整参数 #include <opencv2\opencv.hpp> using namespace cv; int main() { Mat3b img = imread("path_

我使用openCV网站上提供的代码,根据ROI直方图检测到了手,这就是我得到的结果

基于这个结果,我想画轮廓,但结果图像不是我未来处理所需的图像。

我需要做什么才能有一个更平滑的轮廓?谢谢

您的图像有太多的“洞”。试试看

这是C++代码,但您可以轻松地将其移植到Python。您可能需要稍微调整参数

#include <opencv2\opencv.hpp>
using namespace cv;

int main()
{
    Mat3b img = imread("path_to_image");
    Mat1b binary;
    cvtColor(img, binary, CV_BGR2GRAY);
    threshold(binary, binary, 1, 255, THRESH_BINARY);

    Mat1b morph;
    Mat kernel = getStructuringElement(MORPH_ELLIPSE, Size(11,11));
    morphologyEx(binary, morph, MORPH_CLOSE, kernel, Point(-1,-1), 3);

    vector<vector<Point>> contours;
    findContours(morph.clone(), contours, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);

    /// Draw contours
    Mat3b draw = img.clone();
    for (int i = 0; i < contours.size(); i++)
    {
        drawContours(draw, contours, i, Scalar(0,0,255), 2);
    }

    return 0;
}
#包括
使用名称空间cv;
int main()
{
Mat3b img=imread(“路径到图像”);
Mat1b二进制;
CVT颜色(img、二进制、CV_bgr2灰色);
阈值(二进制,二进制,1255,阈值二进制);
Mat1b变形;
Mat-kernel=getStructuringElement(变形椭圆,大小(11,11));
morphologyEx(二进制,变形,变形闭合,核,点(-1,-1),3);
矢量等值线;
findContours(morph.clone()、等高线、CV\u RETR\u CCOMP、CV\u CHAIN\u Abrox\u SIMPLE);
///画轮廓
Mat3b draw=img.clone();
对于(int i=0;i
如果关闭图像,会得到更好的结果,如下所示:


但是,您可能需要从以前的处理中获得更好的结果。

因此,您的问题不是如何绘制轮廓,而是如何检测轮廓?如果图像中的轮廓画得很完美。。。你想要的是某种“凹壳”方法。也许你可以从“凸壳”开始