开放opencv拟合矩形代码,可以搜索图像中存在的矩形区域、模板等。免费使用,但引用时需注明本博网址。谢谢!
#include "cv.h"
#include "highgui.h"
#include <vector>
int otsu (const IplImage* image, int x0, int y0, int dx, int dy);
bool BoxInBox(CvBox2D box,CvBox2D box_outer);
struct ChipInfo
{
// CvRect rect;
CvBox2D box;
double area;
};
int main(int argc, char* argv[])
{
IplImage* src = cvLoadImage("D:/color.bmp",-1);
IplImage* gray = cvCreateImage(cvGetSize(src),8,1);
cvCvtColor(src,gray,CV_RGB2GRAY);
IplImage* gray_clone = cvCloneImage(gray);
int threshold = otsu (gray_clone, 0, 0, gray->width, gray->height)*2/3;
cvThreshold(gray_clone,gray_clone,threshold,255,CV_THRESH_BINARY);
cvSaveImage("D:/t.bmp",gray_clone);
IplImage* show = cvCreateImage(cvGetSize(src),8,3);
cvCvtColor(gray_clone,show,CV_GRAY2RGB);
cvErode(gray_clone,gray_clone);
cvDilate(gray_clone ,gray_clone);
CvMemStorage* storage = cvCreateMemStorage(0);
CvSeq* contours;
cvFindContours( gray_clone, storage, &contours,sizeof(CvContour), CV_RETR_TREE,
CV_CHAIN_APPROX_NONE, cvPoint(0,0) );
IplImage* dst_tmp = cvCloneImage(gray);
cvZero(dst_tmp);
std::vector <ChipInfo> candiate_rect_vec;
for (;contours;contours = contours->h_next)
{
if (contours->total < 30)
{
continue;
}
if (!contours->v_next)
{
continue;
}
CvSeq* contour