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

网站开发用什么编辑语言好wordpress 主题 标签

网站开发用什么编辑语言好,wordpress 主题 标签,揭阳网站制作工具,深圳设计网站有限公司直方图计算-split, calcHist, normalize 广义直方图示例目标分离通道计算直方图绘制计算结果归一化绘制 最终结果 广义直方图 直方图的横坐标除了可以是图片中的强度值#xff0c;也可以是任何其他我们想要观察的特征。例如#xff0c;下面的图片矩阵中包含了0-255的强度值也可以是任何其他我们想要观察的特征。例如下面的图片矩阵中包含了0-255的强度值 如果想观察每个宽度为16的强度值区间上的频数分布我们就可以将横坐标分成下面的区间 [ 0 , 255 ] [ 0 , 15 ] ∪ [ 16 , 31 ] ∪ . . . . . ∪ [ 240 , 255 ] r a n g e b i n 1 ∪ b i n 2 ∪ . . . . . ∪ b i n n 15 [0, 255] [0, 15] \cup [16, 31] \cup ..... \cup [240, 255] \\ range bin_1 \cup bin_2 \cup ..... \cup bin_{n15} [0,255][0,15]∪[16,31]∪.....∪[240,255]rangebin1​∪bin2​∪.....∪binn15​ 这样就可以得到类似于下图的直方图 直方图中的元素的定义如下 维数(dims)即想要观察的参数的数量比如上例中只观察灰度图中每个像素的强度值因此dims 1组数(bins)每个维度中的数据被分组的数量比如上例中分了16组区间所以bins 16全距(range)被观察的数据的总区间比如上例中range [0, 255] 如果你相观察的参数不止一个比如说2个即dims 2那就需要画一个3维的图了。 示例 目标 导入图片分离通道用split函数将图片分离为R, G, B3个矩阵数据计算直方图用calcHist函数对分离出来的3个矩阵分别计算直方图绘制计算结果 分离通道 split函数其原型如下 void cv::split( const Mat src,Mat* mvbegin)该函数将多通道的矩阵数组分成多个单通道的矩阵数组其中 src为要进行通道分离的原矩阵mvbegin为接收分离结果的数组的指针该数组的长度要和原矩阵的通道数相同 该函数还有以下更便利的重载版本第2个参数不再是指针而是多维数组 void cv::split( InputArray m,OutputArrayOfArrays mv)在本例中的应用如下 Mat src{ imread(lena.jpg) }; //导入图片vectorMat bgr_planes; //接收通道分离结果的向量 split(src, bgr_planes); //通道分离之后bgr_planes中的3个元素分别是b,g, r,3个通道的数据矩阵原图是 512 × 512 512 \times 512 512×512的3通道矩阵在VS调试中可以看到分离出来的结果bgr_planes中分别有3个元素而每个元素也是 512 × 512 512 \times 512 512×512的矩阵。 至此通道分离完成接下来对每个通道进行直方图计算。 计算直方图 计算直方图用的函数是calcHist该函数有3个版本这里选择比较常用的一个版本其原型如下 void cv::calcHist( const Mat * images,int nimages,const int * channels,InputArray mask,OutputArray hist,int dims,const int * histSize,const float ** ranges,bool uniform true,bool accumulate false ) imagesconst Mat*类型可以是一个图片矩阵的指针也可以是图片矩阵的数组代表需要计算直方图的图片nimages第1个参数中包含的图片数量channelsconst int*类型可以是一个整数常量也可以是整数数组代表对应图片中需要进行计算的通道索引从0开始。如果数组的话也就是说有多张图片且每张图片中需要有多个通道被计算那么这个参数可能遵循以下写法 [ i m a g e s [ 0 ] . c h a n n e l s ( ) − 1 , i m a g e s [ 0 ] . c h a n n e l s ( ) , i m a g e s [ 0 ] . c h a n n e l s ( ) i m a g e s [ 1 ] . c h a n n e l s ( ) − 1 , . . . , ∑ i m a g e s [ n ] . c h a n n e l s ( ) ] [images[0].channels()-1, images[0].channels(), \\ images[0].channels()images[1].channels()-1, ... , \sum images[n].channels() ] [images[0].channels()−1,images[0].channels(),images[0].channels()images[1].channels()−1,...,∑images[n].channels()]mask可以不指定如果指定则其中的矩阵必须是与对应图片具有相同尺寸且是8位的数据类型从而给图片提供了一个掩码hist输出结果dims直方图的维数必须是正数且不能超过32histSize直方图每个维度的组数rangesconst float **类型所以必须是一个数组的住宿。代表直方图每个维度的全距如果是均匀分布的直方图那每个维度只需要提供最大值和最小值就行了即 m i n m a x {min max} minmax注意是左闭右开的区间如果不是均匀分布的直方图则需要提供每组的最小值及最后一组的最大值即KaTeX parse error: Expected }, got EOF at end of input: …{histSize[i]-1}uniform是否为均匀分布accumulate是否允许覆盖即不清除之前的直方图 该函数也有其他重载版本参数即原理基本与上述版本相同这里就不赘述了。 乍一看这个函数非常复杂事实也确实如此。但是在本例中因为我们将一个3通道的矩阵分离成3个单通道的矩阵然后分别对它们进行计算所以事情就变得相对简单了。我们直接看代码和注释吧 int histSize{ 256 }; //定义直方图中的组数为256即每个强度值一组//定义直方图中的全距 float range[]{ 0, 256 }; //表示全距的区间左闭右开 const float* histRange[]{ range }; //由于直方图只有一个维度所以数组只有一个元素bool uniform{ true }; //均匀分布 bool accumulate{ false }; //不允许覆盖Mat b_hist, g_hist, r_hist; //接收计算结果的矩阵 //b通道的直方图计算 calcHist(bgr_planes[0], //b通道矩阵因为形参是指针类型所以要加取址符1, //只有b通道一个矩阵相当于只有一张图片所以nimages 10, //矩阵中只有一个通道所以只有一个通道索引且从0开始channels 0Mat(), //空矩阵代表不使用掩码b_hist, //接收计算结果的矩阵1, //直方图只有一个维度即b的强度值的频数分布dims 1histSize, //直方图的组数因为是指针类型所以要加取址符histRange, //直方图的全距因为这里只有1个维度、1个矩阵所以该数组包含一个区间uniform, //均匀分布accumulate); //不允许覆盖 //g通道的直方图计算 calcHist(bgr_planes[1], 1, 0, Mat(), g_hist, 1, histSize, histRange, uniform, accumulate); //r通道的直方图计算 calcHist(bgr_planes[2], 1, 0, Mat(), r_hist, 1, histSize, histRange, uniform, accumulate);对于单通道的矩阵来说很多需要传入数组的形参只要传入字面量就行了所以简化了很多。 在Image watch中查看计算结果 可以看到每个通道的计算结果都是 1 × 256 1 \times 256 1×256的矩阵代表原图中每个通道上从0到255这256个强度值的频数。 绘制计算结果 归一化 在绘制直方图的之前需要对数据进行归一化从而使数据的值域能够适应直方图尺寸。这就要用到normalize函数其原型如下 void cv::normalize( InputArray src,InputOutputArray dst,double alpha 1,double beta 0,int norm_type NORM_L2,int dtype -1,InputArray maxk noArray())alpha值域归一化中的值域最小值beta值域归一化中的值域最大值norm_type归一化类型dtype输出矩阵的数据类型默认为-1即与原矩阵保持一致mask掩码矩阵可选 这里我们定义的直方图的尺寸是 512 × 400 512 \times 400 512×400而直方图的计算结果肯定会有超出512的数值所以必须进行归一化处理 int hist_w{ 512 }, hist_h{ 400 }; //直方图的长和宽Mat histImage(hist_h, hist_w, CV_8UC3, Scalar(0, 0, 0)); //用来绘制直方图的图片//对直方图计算结果进行归一化处理 normalize(b_hist, b_hist,0, //归一化之后值域的最小值 alpha 0histImage.rows, //归一化之后值域的最大值 alpha 400NORM_MINMAX, //归一化类型-1, //输出结果类型与原矩阵一致Mat()); //空矩阵代表不是用掩码 normalize(g_hist, g_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat()); normalize(r_hist, r_hist, 0, histImage.rows, NORM_MINMAX, -1, Mat());归一化之后3个通道的计算结果的值域都在0到400之间。 绘制 绘制直方图的基本思路是将每个通道中的计算结果频数结果转换成点的坐标横坐标为强度值纵坐标为结果值即频数然后将每个点和前一个点进行连线最后组成一条完整的折线。具体实现方法如下 int bin_w{ cvRound(static_castdouble(hist_w / histSize)) }; //每组的宽度即组距 for (int i{ 1 }; i histSize; i) {line(histImage,//前一个点Point(bin_w * (i - 1), hist_h - cvRound(b_hist.atfloat(i - 1))),//当前点注意原点在图的左上角Point(bin_w * (i), //组距X当前索引当前点的横坐标hist_h - cvRound(b_hist.atfloat(i))), //图的高度-当前的频数值当前点的纵坐标Scalar(255, 0, 0), 2, 8, 0);line(histImage, Point(bin_w * (i - 1), hist_h - cvRound(g_hist.atfloat(i - 1))),Point(bin_w * (i), hist_h - cvRound(g_hist.atfloat(i))),Scalar(0, 255, 0), 2, 8, 0);line(histImage, Point(bin_w * (i - 1), hist_h - cvRound(r_hist.atfloat(i - 1))),Point(bin_w * (i), hist_h - cvRound(r_hist.atfloat(i))),Scalar(0, 0, 255), 2, 8, 0); }最终结果 右边就是左图的直方图计算结果。横坐标是0-255的每个强度值纵坐标分别为R, G, B3个通道的强度值频数。
http://www.w-s-a.com/news/111999/

相关文章:

  • 固始网站制作熟悉免费的网络营销方式
  • 做网站到a5卖站赚钱搜索引擎优化代理
  • 沈阳网站建设包括win10优化
  • 做百度手机网站点击软网站seo优化徐州百度网络
  • 徐州专业网站制作标志设计作业
  • 自己可以做网站空间吗海天建设集团有限公司网站
  • 教学督导网站建设报告aspcms网站图片不显示
  • 网站开发公司成本是什么门户网站宣传方案
  • 上海 企业网站建设网站怎么开通微信支付
  • 饮料网站建设wordpress主题猫
  • 网站建设需要编码不有没有专门的网站做品牌授权的
  • 做爰在线网站免费空间列表
  • 网站外链建设工作总结郑州网站建设扌汉狮网络
  • 建设企业网站的需要多长时间网站使用说明书模板
  • 建网站首页图片哪里找263企业邮箱网页版登录
  • 盐城网站建设电话高端定制网站
  • 成都网站seo技术施工企业样板先行制度
  • 高端网站建设电话河北建筑工程信息网站
  • 亲 怎么给一个网站做备份财务系统有哪些软件
  • wordpress重新手机优化专家下载
  • 怎样把网站做成软件设计工作室怎么接单
  • html网站设计实例代码重庆多个区划定风险区
  • 推广方案设计同一个网站可以同时做竞价和优化
  • 论坛网站开发 go电商扶贫网站建设
  • 个人建站教程优秀的定制网站建设
  • 农村建设集团有限公司网站下载百度极速版
  • 微信公众号个人可以做网站么做企业网站需要哪些
  • 如何用付费音乐做视频网站wordpress如何设置首页
  • 杨凯做网站网站首页 排版
  • 网站图片标签江苏省建设类高工申报网站