我是openCV的新手。我正在为图像处理应用程序工作。我需要将CvSeq
转换为vector<cv::Point>
。
void find_squares( IplImage* img , cv::vector<cv::vector<cv::Point>>&squares){
IplImage* newimg = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
IplImage* cannyimg = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
IplImage* greyimg = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
IplImage* testimg = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
// convert the loaded image to a canny image
cvCvtColor(img, greyimg, CV_BGR2GRAY);
cvCanny(greyimg, cannyimg, 50, 150, 3);
// necessary to convert loaded image to an image with channel depth of 1
cvConvertImage(cannyimg, newimg);
cvConvertImage(img, testimg);
// allocate necessary memory to store the contours
CvMemStorage* storage = cvCreateMemStorage(0);
CvMemStorage* canny_storage = cvCreateMemStorage(0);
// find the contours in both the loaded image and the canny filtered image
cvFindContours(testimg, storage, &contours, sizeof(CvContour),
CV_RETR_EXTERNAL, CV_CHAIN_CODE);
cvFindContours(newimg, canny_storage, &canny_contours, sizeof(CvContour),
CV_RETR_EXTERNAL, CV_CHAIN_CODE);
// draw the contours on both the loaded image and the canny filtered image
cvDrawContours(testimg, contours, cvScalar(255,255,255), cvScalarAll(255), 100);
cvDrawContours( newimg, canny_contours, cvScalar(255,255,255), cvScalarAll(255),100);
}
我想将contours
转换为cv::vector<cv::vector<cv::Point>>
。我不知道下一步该做什么。
请给我任何想法。
答案 0 :(得分:0)
你的问题的答案太长了,无法写在这里。在一本书中用了整整一章来描述CvSeq的工作原理和原因(&#34;学习OpenCV&#34; Gary Bradski和Adrian Kaehler,第8章)。
更重要的是,你现在不应该学习这一点。 C接口已被弃用,当OpenCV 3.0(目前正在开发中)将被发布时,此接口将被完全删除。这意味着使用Mat而不是IplImage *并使用没有&#39; cv&#39;名字前缀。见documentation of findContours。您的代码将如下所示:
vector<vector<cv::Point>> contours;
cv::findContours(testimg, contours, CV_RETR_EXTERNAL, CV_CHAIN_CODE);
修改(回复评论):
您的绘图功能将是:
drawContours(testimg, contours, -1, 255, CV_FILLED);