Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.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
C++ 如何找到检测图像的轮廓点?_C++_Opencv_Points_Opencv Drawcontour - Fatal编程技术网

C++ 如何找到检测图像的轮廓点?

C++ 如何找到检测图像的轮廓点?,c++,opencv,points,opencv-drawcontour,C++,Opencv,Points,Opencv Drawcontour,我想找到一个轮廓点,它是在物体上绘制的,经过背景减法,findcontour,drawcontour等操作。 我的对象正在移动,因此我的轮廓也不正确。我想找出物体轮廓上的最大点和最小点。 有人能告诉我怎么找吗? 我的目标是移动的汽车,相机视图是顶部 vector<vector<Point>> allContours; vector<Vec4i> hierarchy; Mat _temp = image.clone(); findContours(_temp,

我想找到一个轮廓点,它是在物体上绘制的,经过背景减法,findcontour,drawcontour等操作。 我的对象正在移动,因此我的轮廓也不正确。我想找出物体轮廓上的最大点和最小点。 有人能告诉我怎么找吗? 我的目标是移动的汽车,相机视图是顶部

vector<vector<Point>> allContours;
vector<Vec4i> hierarchy;
Mat _temp = image.clone();
findContours(_temp, allContours, RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
allContours是轮廓的向量。 您可以访问每个等高线的点

============================================================================

所有连续点将由以下代码绘制。


我不知道你在问什么。我会说我认为我知道的,你纠正我。您有一个从移动的汽车或移动的汽车上拍摄的视频,您希望检测轮廓,即通过每个静止图像连接相同颜色像素的线条。这几乎是正确的吗?嗨,艾德林·梅。谢谢你的邀请。不,我的物体在移动,它是汽车,我的相机视图是俯视图。我要的是独立于等高线的等高线点。因为在drawcontour操作后,我根据矩形查找点,但我无法检测到最大值或最小值。请参阅我下面的评论Hanks kim以获取您的回复。我使用了这种方法,但我得到的是轮廓左上角的4个相邻点。我想要所有4个角的点。您知道,有什么方法可以实现这一点吗?@coco如果您想要对象的角点,我建议尝试角点检测。或者你们可以找到轮廓的边界矩形,得到矩形的4个点。Thanx buddy。它成功了@金世瑞
    vector<vector<Point>> allContours;
    vector<Vec4i> hierarchy;
    Mat _temp = imageGray.clone();
    Mat ptDraw = Mat::zeros(image.rows,image.cols,CV_8UC3);
    findContours(_temp, allContours, RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);

    for(int i=0;i<allContours.size();i++)
    {
        drawContours(image, allContours, i, Scalar(0,0,255), 2, 8, hierarchy, 0, Point() );

        for(int j=0;j<allContours.at(i).size();j++)
        {
            Point pt = allContours.at(i).at(j);
            circle(ptDraw,pt,1,Scalar(0,0,255),CV_FILLED);
        }
    }