无法执行大约 PolyDP()

Cannot execute approxPolyDP()

本文关键字:PolyDP 执行      更新时间:2023-10-16
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace cv;
using namespace std;
int main()
{
    Mat image=cvLoadImage("C:/Users/Administrator/Desktop/Desert.jpg",1);
    Mat imagegray, output, imageresult;;
    int thresh=150;
    cvtColor(image, imagegray,CV_BGR2GRAY);
    vector<vector<Point>>contours;
    vector<Vec4i>hierarchy;
    Canny(imagegray, imageresult,thresh, thresh*2);
    findContours(imageresult,contours,hierarchy,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0));
    Mat drawing=Mat::zeros(imagegray.size(),CV_8UC3);
    approxPolyDP(contours,imageresult,100,true);
    namedWindow("Display",1);
    imshow("Display",imageresult);
    waitKey(0);
    return(0);
}

在上面给出的代码中

大约PolyDP()

功能不工作。在使用断点运行它时,程序不会在此函数之后执行。这里给出的代码有什么问题?

以下代码有效

Mat image=cvLoadImage("face1.jpg",1);
Mat imagegray, output, imageresult;;
Mat canny;
cvtColor(image, imagegray,CV_BGR2GRAY);
vector<vector<Point>>contours;
vector<Vec4i>hierarchy;
Canny(imagegray,canny,50,150);
findContours(canny,contours,hierarchy,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0));

   Mat drawing=Mat::zeros(imagegray.size(),CV_8UC3);
 vector<Point>contours_approx;
    approxPolyDP(contours[0],contours_approx,100,true)
//approxPolyDP(contours,imageresult,100,true);
drawContours(image,contours,-1,Scalar(255,0,0));
namedWindow("Display");
imshow("Display",image);
waitKey(0);
return(0);

findcontour() 需要一个 canny/threshold 二进制图像作为输入。

approxPolyDP() 是将一条曲线近似到另一条曲线(点向量)。