OpenCV最小外接矩形

cvMinAreaRect2(contour,storage)最小外接矩形

#include "stdafx.h"

#include "cv.h"

#include "highgui.h"

#include "cxcore.h"

#include "math.h"

int main(int argc, char* argv[])

{    

 IplImage *src; 

 IplImage *dst;

 CvMemStorage* storage=cvCreateMemStorage(0); 

 CvSeq* contour=0; 

  

 src=cvLoadImage("I:\\test.jpg",0);

 cvNamedWindow("image0",1);

 cvShowImage("image0",src);

 int   hei=src->height;

 int wid=src->width; 

 uchar *data;

 data=(uchar*)src->imageData;

 int widstep=src->widthStep;

 int channel=src->nChannels;

  dst=cvCreateImage(cvSize(wid,hei),IPL_DEPTH_8U,3);

 for (int i=0;i<hei;i++)

 {

     for(int j=0;j<wid;j++)

     {

        if (data[i*widstep+j*channel]>120)

        {

            data[i*widstep+j*channel]=0;

        }

        else

        {

            data[i*widstep+j*channel]=255;

        }

     }

 }

  cvNamedWindow("image",0); 

  cvShowImage("image",src);  

 printf("图像的高为:%d,宽为:%d\n\n",hei,wid); 

 cvCvtColor(src, dst, CV_GRAY2BGR);;

cvFindContours(src,storage,&contour,sizeof(CvContour),CV_RETR_CCOMP,CV_CHAIN_APPROX_SIMPLE); 

 for(;contour!=0;contour=contour->h_next) 

 { 

CvBox2D rect=cvMinAreaRect2(contour,storage); 

CvPoint2D32f rect_pts0[4]; 

cvBoxPoints(rect, rect_pts0); 

int npts = 4,k=0; 

int aaa=0,bbb=0; 

CvPoint rect_pts[4], *pt = rect_pts; 

printf("连通区域最小外接矩形顶点坐标分别为:\n"); 

for (int i=0; i<4; i++) 

{ 

 rect_pts[i]= cvPointFrom32f(rect_pts0[i]); 

  printf("%d %d\n",rect_pts[i].x,rect_pts[i].y); 

 aaa=(int)sqrt((pow((rect_pts[0].x-rect_pts[1].x),2)+pow((rect_pts[0].y

-rect_pts[1].y),2))); 

 bbb=(int)sqrt((pow((rect_pts[0].x-rect_pts[3].x),2)+pow((rect_pts[0].

y-rect_pts[3].y),2))); 

   if(aaa<bbb) 

    { 

     k=aaa; 

     aaa=bbb; 

     bbb=k; 

    } 

} 

printf("最小外接矩形的长为:%d宽为:%d。\n\n",aaa,bbb); 

cvPolyLine(dst, &pt, &npts, 1, 1, CV_RGB(255,0,0), 1); 

} 

 cvNamedWindow("image5",1); 

 cvShowImage("image5",dst); 

  cvWaitKey(0); 

cvDestroyWindow("image");  

cvDestroyWindow("image5"); 

cvReleaseImage(&src);    

  return 0; 

}

 

原图:

 

二值黑白颠倒图:

结果图:

外接矩形信息:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值