StupidBeauty
Read times:3557Posted at: - no title specified

OpenCV 2.4.12.0教程翻译:为轮廓创建外接矩形及外接圆,Creating Bounding boxes and circles for contours

目的

在本教程中,妳将学到:

代码

本教程的代码,已经列于下方。 妳也可以从 这里 下载到。

#include "opencv2/highgui/highgui.hpp"

#include "opencv2/imgproc/imgproc.hpp"

#include <iostream>

#include <stdio.h>

#include <stdlib.h>

using namespace cv;

using namespace std;

Mat src; Mat src_gray;

int thresh = 100;

int max_thresh = 255;

RNG rng(12345);

/// 函数头

void thresh_callback(int, void * );

/** @function main */

int main( int argc, char ** argv )

{

/// 载入源图片,并且转换成灰度图片

src = imread( argv[ 1 ], 1 );

/// 将图片转换成灰度图片,并且模糊化

cvtColor( src, src_gray, CV_BGR2GRAY );

blur( src_gray, src_gray, Size( 3 , 3 ) );

/// 创建窗口

char * source_window = "Source" ;

namedWindow( source_window, CV_WINDOW_AUTOSIZE );

imshow( source_window, src );

createTrackbar( " Threshold:" , "Source" , & thresh, max_thresh, thresh_callback );

thresh_callback( 0 , 0 );

waitKey( 0 );

return ( 0 );

}

/** @function thresh_callback */

void thresh_callback(int, void * )

{

Mat threshold_output;

vector < vector < Point > > contours;

vector < Vec4i > hierarchy;

/// 利用阈值化操作来检测边缘

threshold( src_gray, threshold_output, thresh, 255 , THRESH_BINARY );

/// 寻找轮廓

findContours( threshold_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point( 0 , 0 ) );

/// 将轮廓拟合为多边形,并且计算出外接矩形和外接圆

vector < vector < Point > > contours_poly( contours.size() );

vector < Rect > boundRect( contours.size() );

vector < Point2f > center( contours.size() );

vector < float > radius( contours.size() );

for ( int i = 0 ; i < contours.size(); i ++ )

{ approxPolyDP( Mat(contours[i]), contours_poly[i], 3 , true );

boundRect[i] = boundingRect( Mat(contours_poly[i]) );

minEnclosingCircle( (Mat)contours_poly[i], center[i], radius[i] );

}

/// 绘制多边形的轮廓、外接矩形和外接圆

Mat drawing = Mat :: zeros( threshold_output.size(), CV_8UC3 );

for ( int i = 0 ; i < contours.size(); i ++ )

{

Scalar color = Scalar( rng.uniform( 0 , 255 ), rng.uniform( 0 , 255 ), rng.uniform( 0 , 255 ) );

drawContours( drawing, contours_poly, i, color, 1 , 8 , vector < Vec4i > (), 0 , Point() );

rectangle( drawing, boundRect[i].tl(), boundRect[i].br(), color, 2 , 8 , 0 );

circle( drawing, center[i], ( int )radius[i], color, 2 , 8 , 0 );

}

/// 在窗口中显示结果

namedWindow( "Contours" , CV_WINDOW_AUTOSIZE );

imshow( "Contours" , drawing );

}

结果

  1. 1.看下图的结果:

冯静

Unknown beauty

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands

 
Recent comments
2017年4月~2019年4月垃圾短信排行榜Posted at:Thu Sep 26 04:51:48 2024
Qt5.7文档翻译:QWebEngineCookieStore类,QWebEngineCookieStore ClassPosted at:Fri Aug 11 06:50:35 2023盲盒kill -9 18289 Grebe.20230517.211749.552.mp4