• 大小: 7KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-06-17
  • 语言: C/C++
  • 标签: opencv2  矩形检测  

资源简介

(1)实现了矩形的检测(2)此代码是针对图片中的矩形进行的(3)此代码实现了一个文件夹里的图片的批量处理

资源截图

代码片段和文件信息

#include
#include
#include
#include
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include se.h>




using namespace std;
using namespace cv;

string imgpath = “E:\\大贝壳\\C++\\Lab\\Lab\\pic\\“;
string savepath = “E:\\大贝壳\\C++\\Lab\\Lab\\Rect3(15)s\\“;


Mat back result;
int thresh = 50;
IplImage* img = NULL;
IplImage* img0 = NULL;
CvMemStorage* storage = NULL;

string imageName;




vector getfiles(const string& dir const string& extension bool withpath){
vector filenames;
string p;
_tfinddata64_t file;
intptr_t lf;
if ((lf = _tfindfirst64(p.assign(dir).append(“\\*.“).append(extension).c_str() &file)) == -1l)
cout << “文件没有找到!\n“;
else
{
do
{
if (withpath){
filenames.push_back(p.assign(dir).append(“\\“).append(file.name));

}
else{
filenames.push_back(file.name);
}
} while (_tfindnext64(lf &file) == 0);
}
_findclose(lf);

sort(filenames.begin() filenames.end());
return filenames;
}





//angle函数用来返回(两个向量之间找到角度的余弦值)
double angle(CvPoint* pt1 CvPoint* pt2 CvPoint* pt0)
{
double dx1 = pt1->x - pt0->x;
double dy1 = pt1->y - pt0->y;
double dx2 = pt2->x - pt0->x;
double dy2 = pt2->y - pt0->y;
return (dx1*dx2 + dy1*dy2) / sqrt((dx1*dx1 + dy1*dy1)*(dx2*dx2 + dy2*dy2) + 1e-10);
}

// 返回图像中找到的所有轮廓序列,并且序列存储在内存存储器中

CvSeq* findSquares4(IplImage* img CvMemStorage* storage)
{
CvSeq* contours;
int i c l N = 11;
//矩形框的大小
CvSize sz = cvSize(img->width & -2 img->height & -2);

IplImage* timg = cvCloneImage(img);
IplImage* gray = cvCreateImage(sz 8 1);
IplImage* pyr = cvCreateImage(cvSize(sz.width / 2 sz.height / 2) 8 3);
IplImage* tgray;
CvSeq* result;
double s t;

// 创建一个空序列用于存储轮廓角点
//CvSeq本身就是一个可增长的序列,不是固定的序列
CvSeq* squares = cvCreateSeq(0 sizeof(CvSeq) sizeof(CvPoint) storage);


//实例说明:cvSetImageROI(img1cvRect(100100356156)),
//(100100) 表示ROI区域的左上角坐标,356156分别表示ROI区域的长宽。
cvSetImageROI(timg cvRect(0 0 sz.width sz.height));
// 过滤噪音
//图像金字塔,放大,缩小
cvPyrDown(timg pyr 7);
cvPyrUp(pyr timg 7);
tgray = cvCreateImage(sz 8 1);

// 红绿蓝3色分别尝试提取
for (c = 0; c < 3; c++)
{
// 提取 the c-th color plane
//cvSetImageCOI(IplImage* image int coi):(A pointer to the image headerThe channel of interest.)
cvSetImageCOI(timg c + 1);
cvCopy(timg tgray 0);

// 尝试各种阈值提取得到的(N=11)
for (l = 0; l < N; l++)
{
// apply Canny. Take the upper threshold from slider
// Canny helps to catch squares with gradient shading  
if (l == 0)
{
cvCanny(tgray gray 0 thresh 5);
//使用任意结构元素膨胀图像
cvDilate(gray gray 0 1);
}
else
{
// apply threshold if l!=0:
cvThreshold(tgray gray (l + 1) * 255 / N 255 CV_THRESH_BINA

评论

共有 条评论