资源简介
(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
- 上一篇:数据结构课程设计文本编辑C语言描述的
- 下一篇:AEC回音消除经典的源码
相关资源
- opencv2 3D标定.cpp
- 粒子滤波器+目标跟踪的C++实现,VS2
- 利用MFC的Picture控件显示图像和视频
- VS2015MFC+Opencv2 打开图片及简单的图像
- VS2012 + Opencv2.4.9实现单张人脸检测及人
- C++/OpenCV2.4.xx印刷数字精确识别源码
- seetaface开源人脸识别
- C++/OpenCV2.4.9 数字精确识别源码
- 灰度共生矩阵vs2010+opencv2
- 分割阈值opencv2
- 激光雷达数据读取以及显示C++需配置
- OpenCV2.4.8
- Opencv2.4.12 SVM手写数字识别
- 激光雷达数据读取、显示、分割、直
- opencv2深度图滤波
- opencv2.4.9+VS2013打开摄像头
- Irls算法-权值最小二乘算法C++opencv2.
评论
共有 条评论