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

高端的网站设计制作怎么做制作网站的教程

高端的网站设计制作,怎么做制作网站的教程,专业公司网站开发服务,cms影视源码采集文章目录 前言一、connectedComponents函数二、connectedComponentsWithStats函数 前言 图像连通域#xff0c;其实就是图像分割的一种方法。它通过检测像素之间的连接关系和相似性来划分图像中的区域#xff0c;以便进行后续处理。图像邻域和图像邻域分析就不介绍了#x… 文章目录 前言一、connectedComponents函数二、connectedComponentsWithStats函数 前言 图像连通域其实就是图像分割的一种方法。它通过检测像素之间的连接关系和相似性来划分图像中的区域以便进行后续处理。图像邻域和图像邻域分析就不介绍了网上很多。本文会通过代码和结果图来直观展示。 一、connectedComponents函数 OpenCV4提供了提取图像中不同连通域的 connectedComponents() 函数并为部分参数增加了默认值。使用时直接填入输入图像和输出图像两个参数即可。 举例找出上面图像中所有水果并用矩形框标出 代码如下示例 #include opencv2/opencv.hpp #includeiostream 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::vectorstd::vectorcv::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); 分析当 i1 时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::vectorstd::vectorcv::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.atint(i, cv::CC_STAT_AREA);if (area 200){// 绘制外接矩形cv::Rect boundingRect(stats.atint(i, cv::CC_STAT_LEFT),stats.atint(i, cv::CC_STAT_TOP),stats.atint(i, cv::CC_STAT_WIDTH),stats.atint(i, cv::CC_STAT_HEIGHT));cv::rectangle(output, boundingRect, cv::Scalar(0, 255, 0), 2);// 绘制质心cv::Point centroid(centroids.atdouble(i, 0), centroids.atdouble(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://www.hkea.cn/news/14314480/

相关文章:

  • 微信官网网站模板下载不了做铁艺需要什么网站
  • 合肥瑶海区网站建设方案北京网站建设小鱼在线
  • 珠宝网站建设需求广州做外贸网站多少钱
  • 如何自己做网站一年赚一亿做标签网站邀请码
  • 住房建设局子网站海南网站建设服务
  • 最好的网站优化公司电脑版qq在线登录网页入口
  • 用软件建网站复兴企业做网站推广
  • 建设举报网站上海网站建设学校与管理中专
  • 免费职业技能培训网站西宁市住房和城乡建设局网站
  • 乡村规划建设网站做蔬菜的网站有哪些
  • 马鞍山集团网站建设微商城网站建设教程
  • 杭州哪家公司做网站比较好潇朋友免费班级网站建设系统
  • 坪山网站建设免费直链平台
  • 提供东莞网站制作公司广告公司做的网站字体侵权
  • 西安做网站建设的营销型网站建设的价格
  • 网站seo收录工具wordpress企业站主题下载地址
  • 徐州cms建站模板常州网站建设市场
  • 郑州整站网站推广工具网页制作格式
  • 迪庆州建设局网站如何免费做推广
  • 400电话网络推广商城网站lnmp.org wordpress
  • 成都哪家做网站三合一企业网站模板
  • 网站开发 微信收款网站开发实训新的体会
  • wordpress 主题 国外aso优化师主要是干嘛的
  • 织梦仿站怎么用自己笔记本建设网站
  • 网址大全名称襄阳seo招聘
  • 高端网站建设加盟网站建设合同 模板
  • 高端网站案例欣赏wordpress评论通知代码
  • 织梦 xml网站地图safari浏览器下载
  • 创建小型网站的步骤汉中市建设工程审批
  • 免费快速建站工具线上课程怎么做