Opencv轮廓检测

来源:互联网 发布:up to date数据库介绍 编辑:程序博客网 时间:2024/04/30 13:00

 

//轮廓检测#include <opencv2/opencv.hpp>using namespace std;int main(){const char *srcWindowsName = "原图";const char *contoursWindowsName = "轮廓图";const int IMAGE_WIDTH = 400;const int IMAGE_HEIGHT = 200;//创建图像IplImage *srcImage = cvCreateImage(cvSize(IMAGE_WIDTH, IMAGE_HEIGHT), IPL_DEPTH_8U, 3);//填充成白色cvRectangle(srcImage, cvPoint(0,0), cvPoint(srcImage->width, srcImage->height), CV_RGB(255, 255, 255), CV_FILLED);//画一个圆CvPoint ptCircleCenter = cvPoint(IMAGE_WIDTH / 4, IMAGE_HEIGHT / 2);int nRadius = 80;cvCircle(srcImage, ptCircleCenter, nRadius, CV_RGB(255,255,0), CV_FILLED);cvCircle(srcImage, ptCircleCenter, nRadius-50, CV_RGB(255,255,255), CV_FILLED);//画一个矩形CvPoint ptLeftTop = cvPoint(IMAGE_WIDTH / 2 + 20, 20);CvPoint ptRightBottom = cvPoint(IMAGE_WIDTH - 20, IMAGE_HEIGHT - 20);cvRectangle(srcImage, ptLeftTop, ptRightBottom, CV_RGB(0,255,255), CV_FILLED);ptLeftTop = cvPoint(IMAGE_WIDTH / 2 + 60, 40);ptRightBottom = cvPoint(IMAGE_WIDTH - 60, IMAGE_HEIGHT - 40);cvRectangle(srcImage, ptLeftTop, ptRightBottom, CV_RGB(255,255,255), CV_FILLED);//显示图像cvNamedWindow(srcWindowsName, CV_WINDOW_AUTOSIZE);cvShowImage(srcWindowsName, srcImage);//转为灰度图IplImage *grayImage = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 1);cvCvtColor(srcImage, grayImage, CV_BGR2GRAY);//转为二值图IplImage *binaryImage =cvCreateImage(cvGetSize(grayImage), IPL_DEPTH_8U, 1);cvThreshold(grayImage, binaryImage, 250, 250, CV_THRESH_BINARY);//检索轮廓并返回检测到的轮廓的个数CvMemStorage *pcvMstorage = cvCreateMemStorage();CvSeq *pcvSeq = NULL;cvFindContours(binaryImage, pcvMstorage, &pcvSeq, sizeof(CvContour), CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cvPoint(0, 0));//画轮廓图IplImage *contoursImage = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 3);int nLevels = 50;//填充成白色cvRectangle(contoursImage, cvPoint(0, 0), cvPoint(contoursImage->width, contoursImage->height), CV_RGB(255,255,255), CV_FILLED);cvDrawContours(contoursImage, pcvSeq, CV_RGB(255,0,0), CV_RGB(0,255,0), nLevels, 2);//显示轮廓图cvNamedWindow(contoursWindowsName, CV_WINDOW_AUTOSIZE);cvShowImage(contoursWindowsName, contoursImage);//等待cvWaitKey();//销毁窗口,释放资源cvDestroyWindow(srcWindowsName);cvDestroyWindow(contoursWindowsName);cvReleaseImage(&srcImage);cvReleaseImage(&contoursImage);cvReleaseImage(&grayImage);cvReleaseImage(&binaryImage);return 0;}


0 0
原创粉丝点击