gpt4 book ai didi

c++ - 无法在 OpenCV 中执行 approxPolyDp 函数

转载 作者:太空宇宙 更新时间:2023-11-04 16:18:48 28 4
gpt4 key购买 nike

我正在尝试将等高线转换为多边形曲线集,但是当我尝试使用 approxPolyDP 函数时卡住了。首先,我测试了 findContours 是否正常工作并尝试在我的图像中绘制轮廓 - 它适用于 contourIdx = 0。然后我尝试使用 approxPolyDp,如示例所示:http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/bounding_rects_circles/bounding_rects_circles.html

但是在执行过程中,我遇到了与 vector 类和函数 size() 有关的错误“访问冲突”。这是我的代码:

IplImage* image = cvLoadImage("F:\\triangle.png");
waitKey(5000);
//Mat img = imread("triangle.png");
Mat img(image,true);

if(!img.data)
{
cout <<"image file not found";
cv::waitKey(5000);
return -1;
}

//namedWindow( "window", 0 );
//imshow( "window", img );
cvNamedWindow("window");
cvShowImage("window",image);

Mat imgGray;
Mat imgEdges;

cvtColor(img,imgGray,CV_BGR2GRAY);
blur(imgGray,imgGray,Size(3,3));
threshold(imgGray,imgEdges,128,255,CV_THRESH_BINARY);

Mat canny_output;
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;

/// Detect edges using canny
Canny( imgGray, canny_output,100, 100*2, 3 );
/// Find contours
findContours( canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );

/// Draw contours
RNG rng(12345);
Mat drawing = Mat::zeros( canny_output.size(), CV_8UC3 );

if (drawing.type() != CV_8UC3)
{
cout << "Error: image type different then CV_8UC3";
}

Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
drawContours( drawing, contours, 0, color, 2, 8, hierarchy, 0, Point() );


IplImage img3 = drawing;
cvNamedWindow( "Contours", CV_WINDOW_AUTOSIZE );
cvShowImage( "Contours", &img3 );

vector<vector<Point>> contoursOUT/*(contours.size())*/;

approxPolyDP(Mat(contours[0]),contoursOUT,3,true );


waitKey(0);
return 0;

有人知道这里出了什么问题吗?

最佳答案

OpenCV-doc 说 approxPolyDP :

void approxPolyDP (InputArray curve, 
OutputArray approxCurve,
double epsilon,
bool closed)

approxCurve - ...类型应与输入曲线的类型匹配。 ...

所以你实现的最后一部分应该是:

vector<Point> contoursOUT;
approxPolyDP( Mat(contours[0]), contoursOUT, 3, true );

我用这个小改动测试了你的代码,它编译并输出了合理的结果。

关于c++ - 无法在 OpenCV 中执行 approxPolyDp 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19562952/

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