opencv中cvFindContours(srcImg, storage, &contour, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_NONE)
时间: 2023-07-31 21:12:37 浏览: 146
这段代码是用来寻找图像中的轮廓(contours)的。其中,srcImg是输入图像,storage是内存存储器,用于存储轮廓信息,contour是一个指向第一个轮廓的指针,sizeof(CvContour)是轮廓结构体的大小,CV_RETR_LIST是轮廓检索模式,表示检索所有轮廓,CV_CHAIN_APPROX_NONE是轮廓近似方法,表示不进行轮廓近似。通过这段代码,可以得到图像中所有的轮廓信息,包括轮廓的形状、大小、位置等信息。
相关问题
cvFindContours(srcImg, storage, &contour, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_NONE);
cvFindContours是OpenCV库中的一个函数,用于在图像中查找轮廓。它的第一个参数是输入图像srcImg,第二个参数是输出轮廓的容器storage,第三个参数是指向输出轮廓的指针contour,第四个参数是输出轮廓结构体的大小,第五个参数是轮廓检索模式,第六个参数是轮廓逼近方法。
在cvFindContours中,轮廓检索模式CV_RETR_LIST表示只检测轮廓,不建立等级关系,CV_CHAIN_APPROX_NONE表示保存物体边界上所有连续的轮廓点到contour中。
执行该函数后,轮廓信息将存储在contour中,可以使用cvDrawContours等函数将其绘制到图像上。
再opencv中使用c++对重叠目标分别识别
使用OpenCV中的C语言可以对重叠目标进行识别,具体步骤如下:
1. 加载图像:使用cvLoadImage函数加载图像。
2. 灰度化处理:使用cvCvtColor函数将图像转化为灰度图像。
3. 边缘检测:使用cvCanny函数进行边缘检测。
4. 轮廓检测:使用cvFindContours函数进行轮廓检测。
5. 遍历轮廓:对于每一个轮廓,使用cvBoundingRect函数获取其包围矩形。
6. 判断是否重叠:对于每一个包围矩形,与其他包围矩形进行比较,判断是否重叠。
7. 输出结果:输出每一个包围矩形的位置和是否重叠的结果。
以下是使用OpenCV C语言实现对重叠目标的识别的示例代码:
```
#include <cv.h>
#include <highgui.h>
int main(int argc, char** argv)
{
// 加载图像
IplImage* img = cvLoadImage("test.jpg", CV_LOAD_IMAGE_GRAYSCALE);
// 边缘检测
IplImage* edges = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
cvCanny(img, edges, 50, 200, 3);
// 轮廓检测
CvMemStorage* storage = cvCreateMemStorage(0);
CvSeq* contours = 0;
int contours_count = cvFindContours(edges, storage, &contours, sizeof(CvContour),
CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));
// 遍历轮廓并检测重叠
for (CvSeq* contour = contours; contour != 0; contour = contour->h_next)
{
CvRect r = cvBoundingRect(contour, 0);
// 判断是否重叠
bool overlap = false;
for (CvSeq* c = contours; c != 0; c = c->h_next)
{
CvRect r2 = cvBoundingRect(c, 0);
if (r != r2 && (r & r2).area() > 0)
{
overlap = true;
break;
}
}
// 输出结果
printf("Bounding Rect: (%d,%d,%d,%d) - %s\n", r.x, r.y, r.width, r.height, overlap ? "Overlap" : "No overlap");
}
// 释放内存
cvReleaseImage(&img);
cvReleaseImage(&edges);
cvReleaseMemStorage(&storage);
return 0;
}
```
阅读全文