Binary Image Orientation

后端 未结 1 543
情深已故
情深已故 2021-02-08 15:20

I\'m trying to find the orientation of a binary image (where orientation is defined to be the axis of least moment of inertia, i.e. least second moment of area). I\'m using Dr.

相关标签:
1条回答
  • 2021-02-08 15:59

    I worked with the orientation sometimes back and coded the following. It returns me the exact orientation of the object. largest_contour is the shape that is detected.

    CvMoments moments1,cenmoments1;
               double M00, M01, M10;
    
               cvMoments(largest_contour,&moments1);
               M00 = cvGetSpatialMoment(&moments1,0,0);
               M10 = cvGetSpatialMoment(&moments1,1,0);
               M01 = cvGetSpatialMoment(&moments1,0,1);
               posX_Yellow = (int)(M10/M00);
               posY_Yellow = (int)(M01/M00);
    
              double theta = 0.5 * atan(
                        (2 * cvGetCentralMoment(&moments1, 1, 1)) /
                        (cvGetCentralMoment(&moments1, 2, 0) -  cvGetCentralMoment(&moments1, 0, 2)));
                    theta = (theta / PI) * 180;
    
                    // fit an ellipse (and draw it)
    
                    if (largest_contour->total >= 6) // can only do an ellipse fit
                                                     // if we have > 6 points
                    {
                        CvBox2D box = cvFitEllipse2(largest_contour);
                        if ((box.size.width < imgYellowThresh->width) &&  (box.size.height < imgYellowThresh->height))
                        {
    
                            cvEllipseBox(imgYellowThresh, box, CV_RGB(255, 255 ,255), 3, 8, 0 );
                        }
                    }
    
    0 讨论(0)
提交回复
热议问题