当前位置: 首页 > news >正文

深圳龙华区偏僻吗北京百度网站排名优化

深圳龙华区偏僻吗,北京百度网站排名优化,宜春做网站,网站建设的毕业设计文章目录 前言一、connectedComponents函数二、connectedComponentsWithStats函数 前言 图像连通域,其实就是图像分割的一种方法。它通过检测像素之间的连接关系和相似性来划分图像中的区域,以便进行后续处理。图像邻域和图像邻域分析就不介绍了&#x…

文章目录

  • 前言
  • 一、connectedComponents函数
  • 二、connectedComponentsWithStats函数

前言

图像连通域,其实就是图像分割的一种方法。它通过检测像素之间的连接关系和相似性来划分图像中的区域,以便进行后续处理。图像邻域和图像邻域分析就不介绍了,网上很多。本文会通过代码和结果图来直观展示。


一、connectedComponents函数

  OpenCV4提供了提取图像中不同连通域的 connectedComponents() 函数,并为部分参数增加了默认值。使用时直接填入输入图像和输出图像两个参数即可。
在这里插入图片描述

  举例:找出上面图像中所有水果,并用矩形框标出

代码如下(示例):

#include <opencv2/opencv.hpp>
#include<iostream>  
using namespace std;int main()
{cv::Mat image = cv::imread("C:/Users/Opencv/temp/300.png", cv::IMREAD_GRAYSCALE);cv::Mat binImg;cv::threshold(image, binImg, 235, 255, cv::THRESH_BINARY_INV);  // 二值化处理// //统计图像中连通域的个数cv::Mat labels;int numComponents = cv::connectedComponents(binImg, labels);// 绘制每个连通域的边界框cv::Mat output = image.clone();for (int i = 1; i < numComponents; ++i) {// 提取当前连通域的maskcv::Mat mask = (labels == i);// 查找轮廓std::vector<std::vector<cv::Point>> contours;cv::findContours(mask, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);// 绘制边界框cv::Rect boundingRect = cv::boundingRect(contours[0]);cv::rectangle(output, boundingRect, cv::Scalar(0, 255, 0), 2);}cv::imshow("原图", image);cv::imshow("二值图", binImg);cv::imshow("标记", output);cv::waitKey(0);cv::destroyAllWindows();return 0;
}

分析:
(1)根据图像邻域分析原理,进行连通域统计之前,要先把输入图像转换为二值图像。

(2)将二值图传入connectedComponents函数中,连通域结果记录在labels中,返回值是连通域的个数。可视化labels,白色区域就是函数判定的连通域,对这些连通域的所有像素会进行标号处理,从“1”开始。从图1中可以看到很许多较小的连通域,将其放大(如图2),可以看到标号“17”的连通域只有4个像素,标号“18”的只有2个像素。

在这里插入图片描述

图 1

在这里插入图片描述

图 2

(3)示例代码中 cv::Mat mask = (labels == i); 分析:当 i=1 时,labels图中只会把标号“1”的连通域提取出来,其他连通域都置为0,所以通过循环可依次找出不同标号的连通域。下面图3为标号“1”的连通域,可以看到其他白色区域都没有了。然后再对它进行查找轮廓,再添加矩形框,结果如图4。
在这里插入图片描述

图 3

在这里插入图片描述

图 4

下面图5为循环到标号“7”的连通域,详细像素值如图6,矩形框结果如图7

在这里插入图片描述

图 5

在这里插入图片描述

图 6

在这里插入图片描述

图 7

(4)示例代码的最终结果如图8。而原本只想要检测出三个水果,可以通过判定连通域大小,将较大的连通域删除,只保留较大的。示例代码修改如下,结果如图9所示

在这里插入图片描述

图 8
int main()
{cv::Mat image = cv::imread("C:/Users/Opencv/temp/300.png", cv::IMREAD_GRAYSCALE);cv::Mat binImg;cv::threshold(image, binImg, 235, 255, cv::THRESH_BINARY_INV);  // 二值化处理// //统计图像中连通域的个数cv::Mat labels;int numComponents = cv::connectedComponents(binImg, labels);// 绘制每个连通域的边界框cv::Mat output = image.clone();for (int i = 1; i < numComponents; ++i) {// 提取当前连通域的maskcv::Mat mask = (labels == i);// 查找轮廓std::vector<std::vector<cv::Point>> contours;cv::findContours(mask, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);  // 计算边界框面积cv::Rect boundingRect = cv::boundingRect(contours[0]);int area = boundingRect.width * boundingRect.height;if (area < 200)  // 面积小于200的不要continue;// 绘制边界框cv::rectangle(output, boundingRect, cv::Scalar(0, 255, 0), 2);}cv::imshow("原图", image);cv::imshow("二值图", binImg);cv::imshow("标记", output);cv::waitKey(0);cv::destroyAllWindows();return 0;
}

在这里插入图片描述

图 9

二、connectedComponentsWithStats函数

  connectedComponents()函数只能通过标签将图像中的不同连通域区分开,无法得到更多的统计信息。上面的示例代码中,额外采用了findContours函数获得轮廓,然后使用boundingRect函数来计算其最小外接矩形。

  因为得到目标的矩形区域是非常常用的一个步骤,所以OpenCV4提供了connectedComponentsWithStats ()函数用于标记出图像中不同连通域的同时统计连通域的位置、面积的信息。

  相比于connectedComponents()函数,该函数主要多了两个参数:stats和centroids

int cv::connectedComponentsWithStats(InputArray image,                  // 输入图像,应为二值化图像OutputArray labels,                // 输出标签图像,每个像素点对应一个连通域标签OutputArray stats,                 // 输出统计信息,包括连通域的外接矩形、面积等OutputArray centroids,             // 输出连通域的质心坐标int connectivity = 8,              // 连通性,可选择 4 或 8 连通int ltype = CV_32S                   // 标签图像的数据类型,默认为 CV_32S
);

上述示例代码可以修改为:

int main()
{cv::Mat image = cv::imread("C:/Users/Opencv/temp/300.png", cv::IMREAD_GRAYSCALE);cv::Mat binImg;cv::threshold(image, binImg, 235, 255, cv::THRESH_BINARY_INV);  // 二值化处理// 连通组件标记及统计信息计算cv::Mat labels, stats, centroids;int numComponents = cv::connectedComponentsWithStats(binImg, labels, stats, centroids);// 绘制每个连通组件的外接矩形和质心cv::Mat output = image.clone();cv::cvtColor(output, output, cv::COLOR_GRAY2BGR); // 将灰度图转为伪彩色图以便绘制// cv::Mat output = cv::imread("C:/Users/jutze/ljw_C++/Opencv/temp/300.png"); // 或者直接用原图的彩色图for (int i = 1; i < numComponents; ++i) {// 根据面积过滤连通组件int area = stats.at<int>(i, cv::CC_STAT_AREA);if (area > 200){// 绘制外接矩形cv::Rect boundingRect(stats.at<int>(i, cv::CC_STAT_LEFT),stats.at<int>(i, cv::CC_STAT_TOP),stats.at<int>(i, cv::CC_STAT_WIDTH),stats.at<int>(i, cv::CC_STAT_HEIGHT));cv::rectangle(output, boundingRect, cv::Scalar(0, 255, 0), 2);// 绘制质心cv::Point centroid(centroids.at<double>(i, 0), centroids.at<double>(i, 1));cv::circle(output, centroid, 5, cv::Scalar(255, 0, 0), -1);}}cv::imshow("原图", image);cv::imshow("二值图", binImg);cv::imshow("标记", output);cv::waitKey(0);cv::destroyAllWindows();return 0;
}

在这里插入图片描述
注:示例代码中,有一行代码是将灰度图转为伪彩色图,我们知道灰度图是无法转回彩色图的,所以这步称为伪彩色。即将单通道转为三通道,但数值一样,如[247]转为[247,247,247]。三个通道数值一样,所呈现的视觉效果跟灰度图是相同的,如下图
在这里插入图片描述
可以看到,output已经是3×UINT8的三通道类型了,但看起来还是跟灰度图一样。再放大看看数值,三个通道一样

在这里插入图片描述
因为原图是彩色图,示例代码中将其转为灰度图,我们也可以直接用原图来进行绘制,结果如下

在这里插入图片描述


文章转载自:
http://nebulosity.mnqg.cn
http://ravish.mnqg.cn
http://indianness.mnqg.cn
http://midsize.mnqg.cn
http://mesenchyma.mnqg.cn
http://link.mnqg.cn
http://fiorin.mnqg.cn
http://automaker.mnqg.cn
http://oldrecipient.mnqg.cn
http://appraisement.mnqg.cn
http://neurotic.mnqg.cn
http://zythepsary.mnqg.cn
http://povera.mnqg.cn
http://falciform.mnqg.cn
http://kerne.mnqg.cn
http://reorganization.mnqg.cn
http://karyolymph.mnqg.cn
http://forenoon.mnqg.cn
http://spinny.mnqg.cn
http://aerophone.mnqg.cn
http://running.mnqg.cn
http://nodular.mnqg.cn
http://urbanity.mnqg.cn
http://extraparochial.mnqg.cn
http://overcut.mnqg.cn
http://retiform.mnqg.cn
http://hierarchy.mnqg.cn
http://crevasse.mnqg.cn
http://musculoskeletal.mnqg.cn
http://shem.mnqg.cn
http://multipolar.mnqg.cn
http://commutator.mnqg.cn
http://histoplasmosis.mnqg.cn
http://reputation.mnqg.cn
http://overdub.mnqg.cn
http://blob.mnqg.cn
http://niggard.mnqg.cn
http://heterofil.mnqg.cn
http://microsporidian.mnqg.cn
http://enticement.mnqg.cn
http://diastema.mnqg.cn
http://aru.mnqg.cn
http://input.mnqg.cn
http://mairie.mnqg.cn
http://plasmolyze.mnqg.cn
http://scatology.mnqg.cn
http://koniscope.mnqg.cn
http://lymphatitis.mnqg.cn
http://iodimetry.mnqg.cn
http://skiddoo.mnqg.cn
http://consenescence.mnqg.cn
http://antipollution.mnqg.cn
http://crucible.mnqg.cn
http://whine.mnqg.cn
http://antennule.mnqg.cn
http://tavarish.mnqg.cn
http://cottonpicking.mnqg.cn
http://pelage.mnqg.cn
http://slang.mnqg.cn
http://tisza.mnqg.cn
http://antipsychiatry.mnqg.cn
http://saute.mnqg.cn
http://uncoffined.mnqg.cn
http://spigotty.mnqg.cn
http://hosepipe.mnqg.cn
http://knut.mnqg.cn
http://viscous.mnqg.cn
http://morphosyntax.mnqg.cn
http://nitrification.mnqg.cn
http://vulcanism.mnqg.cn
http://contrabassoon.mnqg.cn
http://yourself.mnqg.cn
http://ametabolic.mnqg.cn
http://chatterer.mnqg.cn
http://jobless.mnqg.cn
http://barycenter.mnqg.cn
http://gabby.mnqg.cn
http://firelock.mnqg.cn
http://becalm.mnqg.cn
http://yarmulke.mnqg.cn
http://nephoscope.mnqg.cn
http://aphthoid.mnqg.cn
http://ropemanship.mnqg.cn
http://squally.mnqg.cn
http://jackal.mnqg.cn
http://football.mnqg.cn
http://amperometric.mnqg.cn
http://aridity.mnqg.cn
http://quackishness.mnqg.cn
http://preceptory.mnqg.cn
http://notch.mnqg.cn
http://zincate.mnqg.cn
http://icekhana.mnqg.cn
http://vanadous.mnqg.cn
http://naussie.mnqg.cn
http://epuration.mnqg.cn
http://cephalometer.mnqg.cn
http://impartation.mnqg.cn
http://airlift.mnqg.cn
http://phonochemistry.mnqg.cn
http://www.dt0577.cn/news/64773.html

相关文章:

  • wordpress图站杭州网站建设书生商友
  • 做代理哪个网站靠谱吗中国关键词
  • 游戏网站建设方案书企业如何做网络推广
  • 公司网站开发可行性报告seo入门教程视频
  • 东莞网站建设和制作搜狗站长工具平台
  • 青岛开发区建网站哪家好seo的工作内容
  • 企业网站策划方案书推广渠道有哪些平台
  • 影楼做网站全国唯一一个没有疫情的城市
  • dede网站模板 音响百度入口官网
  • 怎么做网站搜索框搜索汕头seo优化项目
  • 网站建设策划书范文市场调研报告
  • 自己做的网站怎么弄成app品牌运营管理有限公司
  • 官方网站链接如何做软文大全800字
  • 做网站小编怎么样2021近期时事新闻热点事件
  • 镇海区住房建设网站怎么查河南专业网络推广公司
  • 做网批有专门的网站吗谁能给我个网址
  • 莞城仿做网站软文营销网
  • ps 矢量素材网站网站排名软件优化
  • 好听的建筑公司名字大全seo排名的方法
  • 珠海高端网站开发百度账号人工申诉
  • 网站日志查询系统seo网站关键词优化软件
  • 泰安网站建设找工作网站推广常用的方法
  • 陕西省建设信息网站百度贴吧热线客服24小时
  • 广州网站建设公司长沙seo网站优化公司
  • python网站开发效率网络营销核心要素
  • 怎么做网站banner2019年度最火关键词
  • 外贸公司的网站建设模板网络运营是做什么的工作
  • 做汽车介绍视频的网站吗百度学术查重
  • 草桥做网站的公司长春头条新闻今天
  • 建设聚美优品网站收流量费吗网络广告代理