RotatedRect fitEllipse(InputArray points)
Finds a rotated rectangle of the minimum area enclosing the input 2D point set.
Fits an ellipse around a set of 2D points.
RotatedRect minAreaRect(InputArray points)Finds a rotated rectangle of the minimum area enclosing the input 2D point set.
vector<vector<Point>> contours; findContours( ..., contours, ...); // This will find out the contours and save in contours cout<<endl<<Mat(contours[index])<<endl; //index = 0,1,2,... used to print the format of contours ellipse = fitEllipse( Mat(contours[i]) ); // fitting ellipse in contour points Rect = minAreaRect( Mat(contours[i]) );
The code provided below is slight modification of code given in OpenCV documentation.
Steps:
- Load image
- Convert to gray-scale.
- Remove noise by blurring with a Gaussian filter
- Create new window
- Add trackbar to the window
- Detect Canny edges
- Find contours
- Find the rotated rectangles and ellipses for each contour
- Draw contours, rotated rectangles and ellipses
Functions:
minAreaRect, fitEllipse, createTrackbar, findContours,
Canny, blur, cvtColor, imshow, imread, waitKey.
Example:
-----------------#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <stdlib.h> #include <stdio.h> #include<iostream> using namespace cv; using namespace std; Mat src; Mat src_gray; int thresh = 73; int points = 50; int max_thresh = 255; RNG rng(12345); void thresh_callback(int, void*); int main( ) { /// Load source image and convert it to gray src = imread( "1.jpg", 1 ); /// Convert image to gray and blur it cvtColor( src, src_gray, CV_BGR2GRAY ); blur( src_gray, src_gray, Size(3,3) ); namedWindow( "Source", CV_WINDOW_AUTOSIZE ); imshow( "Source", src ); createTrackbar( " Threshold:", "Source", &thresh, max_thresh, thresh_callback ); namedWindow( "Source1", CV_WINDOW_AUTOSIZE ); imshow( "Source1", src ); createTrackbar( " Threshold:", "Source1", &points, max_thresh, thresh_callback ); thresh_callback(0,0); waitKey(0); return(0); } void thresh_callback( int, void*) { Mat threshold_output; Mat edge; vector<vector<Point> > contours; vector<Vec4i> hierarchy; /// Detect edges Canny( src_gray, edge, thresh, 3*thresh, 3); edge.convertTo(threshold_output, CV_8U); /// Find contours findContours( threshold_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) ); /// Find the rotated rectangles and ellipses for each contour vector<RotatedRect> minRect( contours.size() ); vector<RotatedRect> minEllipse( contours.size() ); cout<<endl<<contours[1]<<endl; cout<<endl<<Mat(contours[1])<<endl; for( int i = 0; i < contours.size(); i++ ) { minRect[i] = minAreaRect( Mat(contours[i]) ); if( contours[i].size() > points ) { minEllipse[i] = fitEllipse( Mat(contours[i]) ); } } /// Draw contours + rotated rects + ellipses 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) ); // contour drawContours( drawing, contours, i, color, 1, 8, vector<Vec4i>(), 0, Point() ); // ellipse ellipse( drawing, minEllipse[i], color, 2, 8 ); // rotated rectangle Point2f rect_points[4]; minRect[i].points( rect_points ); for( int j = 0; j < 4; j++ ) line( drawing, rect_points[j], rect_points[(j+1)%4], color, 1, 8 ); } /// Show in a window namedWindow( "Contours", CV_WINDOW_AUTOSIZE ); imshow( "Contours", drawing ); }
-----------------
applets for java for beginners
ReplyDeleteThank You. You saved so much of my time.
ReplyDeleteعندما نتحدث عن شركة لتنظيف المنزل ، يجب أن نأخذ في الاعتبار أن الشركة تقوم بمهام متعددة داخل المنزل ، مثل: اعتني بكافة أعمال التنظيف الشامل سواء في شقتك أو في منزل مكون من عدة طوابق ، بما في ذلك جميع الغرف والحمامات والمطابخ والسلالم والجدران والأسقف والأثاث وما إلى ذلك ، ليس هذا فقط ولكن الشركة البولندية محترفة الأثاث والأرضيات والأجهزة والخزائن. ويتم كل هذا بمساعدة معدات محددة وأدوات التنظيف والتطهير لضمان التنظيف الفعال في وقت محدود.
ReplyDeleteشركة الندى للخدمات المنزلية