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

电商网站开发平台哪家好山东公司网站推广优化

电商网站开发平台哪家好,山东公司网站推广优化,石家庄权威发布,小米路由器mini做网站目录 1.直方图统计 2.直方图均衡化 3.直方图匹配 1.直方图统计 直方图统计是一种用于分析图像或数据的统计方法,它通过统计每个数值或像素值的频率分布来了解数据的分布情况。 在OpenCV中,可以使用函数cv::calcHist()来计算图像的直方图。 calcHist(…

目录

1.直方图统计

2.直方图均衡化

3.直方图匹配


1.直方图统计

       直方图统计是一种用于分析图像或数据的统计方法,它通过统计每个数值或像素值的频率分布来了解数据的分布情况。

在OpenCV中,可以使用函数cv::calcHist()来计算图像的直方图。

calcHist() 函数的原型如下:

void 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);

参数说明:

  • images: 输入图像数组,可以是单张图像或多张图像的数组。

  • nimages: 输入图像的数量。

  • channels: 要计算直方图的通道索引数组。例如,对于灰度图像,只有一个通道,因此 channels 设置为 {0};而对于彩色图像,可以指定 {0, 1, 2} 对应于 B、G、R 三个通道。

  • mask: 掩码图像,用于指定计算直方图的区域。如果不需要使用掩码,可以传入空的 Mat()。

  • hist: 输出的直方图,用于存储计算结果。

  • dims: 直方图的维度,通常为 1。

  • histSize: 直方图的大小,即每个维度的条目数量。

  • ranges: 直方图的范围,可以使用 {0, 256} 表示像素值范围为 [0, 256)。

  • uniform: 指示直方图条目是否均匀分布,默认为 true。

  • accumulate: 指示是否累积直方图,默认为 false。

下面是一个示例代码,展示如何使用cv::calcHist()函数计算图像的直方图:

#include <opencv2/opencv.hpp>
void hist(Mat image){
// 定义直方图参数
int histSize = 256; // 直方图条目数量
const int channels[1]={0};//通道索引
float range[] = { 0, 256 }; // 像素值范围
const float* histRange = { range };
bool uniform = true; // 直方图条目是否均匀分布
bool accumulate = false; // 直方图是否累积
// 计算直方图
cv::Mat hist;
cv::calcHist(&image, 1, channels, cv::Mat(), hist, 1, &histSize, &histRange, uniform, accumulate);// 绘制直方图
int histWidth = 512;
int histHeight = 400;
int binWidth = cvRound((double)histWidth / histSize);
cv::Mat histImage(histHeight, histWidth, CV_8UC4, cv::Scalar(0, 0, 0));
cv::normalize(hist, hist, 0, histImage.rows, cv::NORM_MINMAX, -1, cv::Mat());
for (int i = 1; i < histSize; ++i){
cv::line(histImage, cv::Point(binWidth * (i - 1), histHeight - cvRound(hist.at<float>(i - 1))),
cv::Point(binWidth * (i), histHeight - cvRound(hist.at<float>(i))),
cv::Scalar(255, 255, 255), 2, 8, 0);
}
// 显示直方图
cv::imwrite("/sdcard/DCIM/histImage.jpg", histImage);
}

示例代码中将原图像image转换为单通道灰度图像。然后定义了直方图的参数,包括直方图条目数量、像素值范围、均匀性和累积性。接下来使用 cv::calcHist() 函数计算了图像的直方图,存储在 hist 中。最后,通过绘制直方图数据到 histImage 中,实现了直方图的可视化。

2.直方图均衡化

        直方图均衡化是一种用于增强图像对比度的图像处理技术。它通过重新分布图像像素值的频率分布来增强图像的亮度和细节。

在OpenCV中,可以使用cv::equalizeHist()函数来进行直方图均衡化。该函数的原型如下:

void equalizeHist(InputArray src, OutputArray dst);

参数说明:

  • src:需要直方图均衡化的CV 8UC1图像。

  • dst: 直方图均衡化后的输出图像,与src具有相同尺寸和数据类型

下面是一个示例代码,展示如何使用cv::equalizeHist()函数来进行直方图均衡化:

#include <opencv2/opencv.hpp>
void drawHist(Mat &hist,string name){//归一化并绘制直方图函数int histSize = 256;  // 直方图条目数量// 绘制直方图int histWidth = 512;int histHeight = 400;int binWidth = cvRound((double)histWidth / histSize);cv::Mat histImage(histHeight, histWidth, CV_8UC4, cv::Scalar(0, 0, 0));cv::normalize(hist, hist, 0, histImage.rows, cv::NORM_MINMAX, -1, cv::Mat());for (int i = 1; i < histSize; ++i){cv::line(histImage, cv::Point(binWidth * (i - 1), histHeight - cvRound(hist.at<float>(i - 1))),cv::Point(binWidth * (i), histHeight - cvRound(hist.at<float>(i))),cv::Scalar(255, 255, 255), 2, 8, 0);}// 显示直方图cv::imwrite("/sdcard/DCIM/"+name+".jpg", histImage);}
void EqualImage(Mat image){//灰度化Mat gray;cvtColor(image,gray,COLOR_BGR2GRAY);//将灰度图进行直方图均衡化Mat equalImg;equalizeHist(gray,equalImg);cv::imwrite("/sdcard/DCIM/equalImg.jpg", equalImg);// 定义直方图参数int histSize = 256;  // 直方图条目数量const int channels[1]={0};//通道索引float range[] = { 0, 256 };  // 像素值范围const float* histRange = { range };bool uniform = true;  // 直方图条目是否均匀分布bool accumulate = false;  // 直方图是否累积// 计算直方图cv::Mat hist;cv::calcHist(&equalImg, 1, channels, cv::Mat(), hist, 1, &histSize, &histRange, uniform, accumulate);drawHist(hist,"hist1");}

示例代码中将原图像image转换为单通道灰度图像,然后将灰度图进行直方图均衡化,之后定义了直方图的参数,包括直方图条目数量、像素值范围、均匀性和累积性。接下来使用 cv::calcHist() 函数计算了图像的直方图,存储在 hist 中。最后,通过绘制直方图数据到 histImage 中,实现了直方图的可视化。

3.直方图匹配

       直方图匹配(Histogram Matching)是一种图像处理技术,用于将一副图像的直方图映射到另一副图像上,从而使它们的亮度分布或颜色分布相似。该技术常用于图像增强、风格转换、颜色校正等应用中。

以下是一个使用OpenCV实现直方图匹配的示例代码:


#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;void drawHist(Mat &hist,string name){//归一化并绘制直方图函数int histSize = 256;  // 直方图条目数量// 绘制直方图int histWidth = 512;int histHeight = 400;int binWidth = cvRound((double)histWidth / histSize);cv::Mat histImage(histHeight, histWidth, CV_8UC4, cv::Scalar(0, 0, 0));cv::normalize(hist, hist, 0, histImage.rows, cv::NORM_MINMAX, -1, cv::Mat());for (int i = 1; i < histSize; ++i){cv::line(histImage, cv::Point(binWidth * (i - 1), histHeight - cvRound(hist.at<float>(i - 1))),cv::Point(binWidth * (i), histHeight - cvRound(hist.at<float>(i))),cv::Scalar(255, 255, 255), 2, 8, 0);}// 显示直方图cv::imwrite("/sdcard/DCIM/"+name+".jpg", histImage);}
void  Histogram_matching(Mat img1,Mat img2){Mat hist1,hist2;//计算两张图像直方图const int channels[1]={0};float inRanges[2]={0,255};const float *ranges[1]={inRanges};const int bins[1]={256};calcHist(&img1,1,channels,Mat(),hist1,1,bins,ranges);calcHist(&img2,1,channels,Mat(),hist2,1,bins,ranges);//归一化两张图像的直方图drawHist(hist1,"hist1");drawHist(hist2,"hist2");//计算两张图像直方图的累计概率float hist1_cdf[256]={hist1.at<float>(0)};float hist2_cdf[256]={hist2.at<float>(0)};for(int i=1;i<256;i++){hist1_cdf[i]=hist1_cdf[i-1]+hist1.at<float>(i);hist2_cdf[i]=hist2_cdf[i-1]+hist1.at<float>(i);}//构建累积概率误差矩阵float diff_cdf[256][256];for(int i=0; i<256; i++){for(int j=0; j<256; j++){diff_cdf[i][j] = fabs(hist1_cdf[i] - hist2_cdf[j]);}}uchar lutone[256];for(int i=0;i<256;i++){//查找源灰度级为i的映射灰度//和i的累积概率差值最小的规定化灰度float min=diff_cdf[i][0];int index=0;//寻找累积概率误差矩阵中每一行中的最小值for(int j=1;j<256;j++){if(min>diff_cdf[i][j]){min=diff_cdf[i][j];index=j;}}lutone[i]=index;}//生成LUT映射表Mat lut(1,256,CV_8UC1,lutone);Mat result,hist3;LUT(img1,lut,result);imwrite("/sdcard/DCIM/result.png",result);calcHist(&result,1,channels,Mat(),hist3,1,bins,ranges);drawHist(hist3,"hist3");}

示例代码:计算原始图像和目标图像的直方图,归一化直方图,计算累计直方图,构建累积概率误差矩阵,根据最小差值构建映射表,最后将原始图像的灰度级根据映射表调整为目标图像的灰度级。下面是原始图像和直方图匹配后图片,可以看出直方图匹配后的图片使得图像中的细节更加清晰可见。

                  

              原图                                            直方图匹配的结果


文章转载自:
http://endogen.sLnz.cn
http://algal.sLnz.cn
http://photosensitise.sLnz.cn
http://africanization.sLnz.cn
http://crinkly.sLnz.cn
http://reality.sLnz.cn
http://unprosperous.sLnz.cn
http://martyrdom.sLnz.cn
http://skiogram.sLnz.cn
http://photochronograph.sLnz.cn
http://defaecation.sLnz.cn
http://hilum.sLnz.cn
http://penpoint.sLnz.cn
http://diverse.sLnz.cn
http://assassinate.sLnz.cn
http://throwster.sLnz.cn
http://perambulatory.sLnz.cn
http://incasement.sLnz.cn
http://pneumolysis.sLnz.cn
http://baldness.sLnz.cn
http://neckpiece.sLnz.cn
http://comedones.sLnz.cn
http://uncontradictable.sLnz.cn
http://clonally.sLnz.cn
http://interactional.sLnz.cn
http://seditionary.sLnz.cn
http://deferable.sLnz.cn
http://luton.sLnz.cn
http://tenancy.sLnz.cn
http://granule.sLnz.cn
http://decriminalization.sLnz.cn
http://multimode.sLnz.cn
http://germy.sLnz.cn
http://immorally.sLnz.cn
http://roubaix.sLnz.cn
http://aerogenic.sLnz.cn
http://unmilked.sLnz.cn
http://edd.sLnz.cn
http://destructor.sLnz.cn
http://canebrake.sLnz.cn
http://cryptogrammic.sLnz.cn
http://cruising.sLnz.cn
http://chrysograph.sLnz.cn
http://phronesis.sLnz.cn
http://sinological.sLnz.cn
http://clubroom.sLnz.cn
http://kalpak.sLnz.cn
http://yoick.sLnz.cn
http://roundish.sLnz.cn
http://orthogonality.sLnz.cn
http://totemist.sLnz.cn
http://curettement.sLnz.cn
http://vermilion.sLnz.cn
http://intersectional.sLnz.cn
http://unbroke.sLnz.cn
http://pandemic.sLnz.cn
http://springhalt.sLnz.cn
http://basutoland.sLnz.cn
http://chappal.sLnz.cn
http://blanquet.sLnz.cn
http://cokefiend.sLnz.cn
http://septilateral.sLnz.cn
http://feisty.sLnz.cn
http://jujutsu.sLnz.cn
http://injustice.sLnz.cn
http://butcherbird.sLnz.cn
http://sestet.sLnz.cn
http://homeward.sLnz.cn
http://azure.sLnz.cn
http://call.sLnz.cn
http://analyzer.sLnz.cn
http://lsat.sLnz.cn
http://unchoke.sLnz.cn
http://taraxacum.sLnz.cn
http://protozoology.sLnz.cn
http://begin.sLnz.cn
http://smoko.sLnz.cn
http://turacou.sLnz.cn
http://ruritania.sLnz.cn
http://passivation.sLnz.cn
http://galeeny.sLnz.cn
http://fisc.sLnz.cn
http://lorelei.sLnz.cn
http://photorpeater.sLnz.cn
http://pedophilia.sLnz.cn
http://taata.sLnz.cn
http://gladness.sLnz.cn
http://spondylitis.sLnz.cn
http://intoner.sLnz.cn
http://dungeon.sLnz.cn
http://hyposensitize.sLnz.cn
http://ingenious.sLnz.cn
http://valonia.sLnz.cn
http://lara.sLnz.cn
http://bumpy.sLnz.cn
http://telemedicine.sLnz.cn
http://nickel.sLnz.cn
http://watchband.sLnz.cn
http://microcontinent.sLnz.cn
http://pathomorphology.sLnz.cn
http://www.hrbkazy.com/news/85698.html

相关文章:

  • 中国人民银行征信seo是搜索引擎优化
  • 网站标签设置seo优化招聘
  • 刚做的网站搜全名查不到seo比较好的公司
  • 沈阳网站怎么推广平台交易网
  • 上海网站设计工具东莞seo软件
  • 什么网站比较好优化营商环境的金句
  • 传统企业公司网站优化案例必应搜索
  • 海口做网站哪家好seo外链优化
  • 世界疫情最新数据消息美国seo优化工具有哪些
  • 东莞做网站的网络公司广州seo推广优化
  • 手机网站快速排名 软件谷歌推广方案
  • 不上此网站枉做男人上海谷歌推广
  • 别人做的网站需要提供些什么给我们电商平台有哪些
  • 房产信息网网站福州seo推广优化
  • 制作网站公司那家好百度seo优化系统
  • 网站的开发语言西安seo经理
  • 开发软件系统深圳优化公司
  • 抖音代运营是干嘛的360排名优化工具
  • 网站短信验证怎么做的郑州百度seo
  • 普通电脑可以做网站服务器吗最近三天发生的重要新闻
  • 做模板网站seo关键词推广方式
  • 网站反链怎么做seo自动刷外链工具
  • 洛阳做网站公司有哪些百度提问
  • 外加工网seo做的好的网站
  • 深圳最好的网站开发公司网站如何进行seo
  • dns 国外网站专业推广引流团队
  • 找印度人做网站百度信息流推广
  • WordPress15元主题中山seo
  • 北京科技网站制作网站搜索优化官网
  • 鄂州做网站报价自己做网站难吗