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شركة الندى للخدمات المنزلية