千家信息网

opencv3.0识别并提取图形中的矩形的方法是什么

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关opencv3.0识别并提取图形中的矩形的方法是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。利用opencv来识别图
千家信息网最后更新 2026年11月03日opencv3.0识别并提取图形中的矩形的方法是什么

这篇文章将为大家详细讲解有关opencv3.0识别并提取图形中的矩形的方法是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

利用opencv来识别图片中的矩形。

其中遇到的问题主要是识别轮廓时矩形内部的形状导致轮廓不闭合。

1. 对输入灰度图片进行高斯滤波2. 做灰度直方图,提取阈值,做二值化处理3. 提取图片轮廓4. 识别图片中的矩形5. 提取图片中的矩形

1.对输入灰度图片进行高斯滤波

cv::Mat src = cv::imread("F:\\t13.bmp",CV_BGR2GRAY); cv::Mat hsv; GaussianBlur(src,hsv,cv::Size(5,5),0,0);

2.做灰度直方图,提取阈值,做二值化处理

由于给定图片,背景是黑色,矩形背景色为灰色,矩形中有些其他形状为白色,可以参考为:提取轮廓时,矩形外部轮廓并未闭合。因此,我们需要对整幅图做灰度直方图,找到阈值,进行二值化

处理。即令像素值(黑色)小于阈值的,设置为0(纯黑色);令像素值(灰色和白色)大于阈值的,设

置为255(白色)

// Quantize the gray scale to 30 levels int gbins = 16; int histSize[] = {gbins};

// gray scale varies from 0 to 256 float granges[] = {0,256};

const float* ranges[] = { granges }; cv::MatND hist;

// we compute the histogram from the 0-th and 1-st channels int channels[] = {0};

//calculate hist calcHist( &hsv, 1, channels, cv::Mat(),

// do not use mask hist, 1, histSize, ranges, true,

// the histogram is uniform false );

//find the max value of hist double maxVal=0;

minMaxLoc(hist, 0, &maxVal, 0, 0); int scale = 20;

cv:Mat histImg;

histImg.create(500,gbins*scale,CV_8UC3);

//show gray scale of hist image for(int g=0;g

float binVal = hist.at(g,0);

int intensity = cvRound(binVal*255);

rectangle( histImg, cv::Point(g*scale,0),

cv::Point((g+1)*scale - 1,binVal/maxVal*400), CV_RGB(0,0,0), CV_FILLED ); } cv::imshow("histImg",histImg);

//threshold processing cv::Mat hsvRe;

threshold( hsv, hsvRe, 64, 255,cv::THRESH_BINARY);

3.提取图片轮廓

为了识别图片中的矩形,在识别之前还需要提取图片的轮廓。在经过滤波、二值化处理后,轮廓提取后的效果比未提取前的效果要好很多。

4.识别矩形

识别矩形的条件为:图片中识别的轮廓是一个凸边形、有四个顶角、所有顶角的角度都为90度。

vector approx; for (size_t i = 0; i < contours.size(); i++) {

approxPolyDP(Mat(contours[i]), approx, arcLength(Mat(contours[i]), true)*0.02, true);

if (approx.size() == 4 && fabs(contourArea(Mat(approx))) > 1000 && isContourConvex(Mat(approx))) { double maxCosine = 0;

for( int j = 2; j < 5; j++ ) { double cosine = fabs(angle(approx[j%4], approx[j-2], approx[j-1]));

maxCosine = MAX(maxCosine, cosine); }

if( maxCosine < 0.3 ) squares.push_back(approx);

} }

关于opencv3.0识别并提取图形中的矩形的方法是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

矩形 图片 轮廓 灰度 阈值 处理 白色 直方图 黑色 图形 方法 像素 内容 形状 效果 文章 更多 灰色 知识 篇文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 山东特亿宝互联网科技有限公司 科技创新与互联网经济 重庆互联网络科技 科技互联网公司logo 上海万想互联网科技 互联网高科技股票 互联网金融和金融科技 青岛中康互联网医疗科技有限公司 剑昆互联网络科技有限公司临桂 苏州五指互联网络科技有限 新兴科技互联网创新大赛颁奖典礼 乌苏新华互联网科技做什么的 互联网公司黑科技创始人 高科技互联网发展前景如何 科技互联网的核心竞争力 江苏互联网智能科技产品出厂价 万物互联网智能科技 银川新华互联网科技学校是国营吗 互联网科技职业技能培训学校 东风日产互联网科技公司叫什么 咖啡网 互联网科技活动banner 美国互联网保险保险科技 互联网科技财经 科技信息互联网 南京欣网互联网科技 睿民互联网科技 四个字互联网科技公司取名 互联网科技股午盘股票涨跌 成都互联网科技公司工作好不好
0