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

wordpress 主题制作软件seo关键词优化软件手机

wordpress 主题制作软件,seo关键词优化软件手机,商业网站建设案例课程百度云,连锁品牌网站建设文章目录 opencv图像的直方图#xff0c;二维直方图#xff0c;直方图均衡化一、图像的直方图1、什么是图像的直方图#xff1a;2、直方图的作用#xff1a;3、如何绘制图像的直方图#xff1a;#xff08;1#xff09;cv::calcHist()函数原型#xff1a;英文单词 calc… 文章目录 opencv图像的直方图二维直方图直方图均衡化一、图像的直方图1、什么是图像的直方图2、直方图的作用3、如何绘制图像的直方图1cv::calcHist()函数原型英文单词 calculator histogram2代码示例cv::cvRound()函数将浮点数值四舍五入为最接近的整数灰度图像直方图彩色图像直方图 二、二维直方图1、什么是二维直方图2、二维直方图与直方图有哪些不同3、二维直方图的作用4、如何绘制二维直方图 三、直方图均衡化1、直方图均衡化的原理2、opencv中可以使用 cv::equalizeHist()函数来实现直方图均衡化1cv::equalizeHist()函数原型2代码示例灰度直方图均衡化彩色直方图均衡化 opencv图像的直方图二维直方图直方图均衡化 一、图像的直方图 1、什么是图像的直方图 要理解直方图绕不开“亮度”这个概念人们把亮度分为0到255共256个数值数值越大代表的亮度越高其中0代表纯黑色最暗区域255表示最亮纯白色而中间的数字就是不同亮度的灰色图像的直方图是一种统计图它显示了图像中各个灰度级别的分布情况(也就是统计一幅图某个亮度像素的数量)通常它的横轴代表像素的灰度级别从0到255而纵轴代表该灰度级别在图像中出现的频次或概率 2、直方图的作用 可视化图像亮度分布直方图能够帮助我们直观地了解图像的亮度分布情况从而为图像处理提供重要参考对比度调整通过观察直方图我们可以确定图像的对比度是否合适从而决定是否需要进行对比度调整灰度级别选择直方图可以帮助我们选择合适的灰度级别以使图像的细节更加清晰 3、如何绘制图像的直方图 在opencv中可以使用 cv::calcHist()函数来计算图像的直方图这个函数可以接受一个通道的图像(灰度图像)或多个通道的图像(彩色图像) 1cv::calcHist()函数原型英文单词 calculator histogram 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 );参数解释 images输入图像可以是单通道或多通道图像 nimages输入图像的个数(可以输入多张图像) channels需要统计直方图的第几通道比如{0}表示统计第一个通道{0, 1, 2}表示统计所有三个通道 mask掩膜用于指定计算直方图的区域(必须是一个8位(CV_8U)的数组并且和images的数组大小相同) hist输出的直方图数组calcHist函数只是计算直方图的数据直方图数据需要一个cv::Mat类型的变量来存储 dims输出直方图的维度(由channels值决定dims的数值对于灰度图像dims为1因为我们只考虑了一个通道(亮度通道)对于彩色图像通常会考虑多个通道比如在HSV色彩空间中dims为2(H和S两个通道) ) histSize指的是直方图横坐标分成多少个区间就是bin的个数(用于控制直方图的精细度)把直方图横坐标ranges分成histSize个区间(比如ranges180histSize30则横坐标被分成了30个小竖条每个小竖条的长度为6); ranges横轴代表像素的灰度级别ranges相当于横坐标的取值范围(对于灰度图像单通道只有1个range灰度级别的范围从0到255对于彩色图像有多个通道就有多个range对于每个通道ranges指定了取值范围通常在彩色图像中H(色相)的范围是0到180S(饱和度)和V(明度)的范围是0到255 ) uniform是否对得到的直方图数组进行归一化处理 accumulate在多个图像时是否累积计算像素值的个数 2代码示例 cv::cvRound()函数将浮点数值四舍五入为最接近的整数 // 函数在图像处理过程中经常用于处理像素值特别是当需要将浮点数转换为整数时可以保留最接近的整数值 int cvRound(double value)参数解释 value待四舍五入的浮点数灰度图像直方图 #include opencv2\opencv.hpp #include iostream #include demo.husing namespace cv; using namespace std;int main() {// 读取灰度图像cv::Mat image cv::imread(C:\\cpp\\image\\suzy2.jpg, cv::IMREAD_GRAYSCALE);if (image.empty()) {std::cerr Error: 无法读取图像文件. std::endl;return -1;}// 直方图计算的输出值是一个cv::Mat对象cv::Mat hist;// X轴被分成了256个小区间int bins 256;// 灰度图只有1个ranges所以histSize跟要ranges对应定义成1个int histSize[] { bins };// X轴的取值范围float xRanges[] { 0, 256 };// 在C中数组名本身就代表该数组的首地址无需使用取地址符号,// const float* ranges xRanges;const float* ranges[] { xRanges };// 我们要计算灰度图像的第0个通道所以这里channels定义成{0}int channels[] { 0 };calcHist(image, 1, channels, Mat(), hist, 1, histSize, ranges, true, false);// 待绘制的目标图像将直方图计算的输出值hist绘制到histImage图像上int histWidth 512, histHeight 400;int binWidth cvRound( (double)histWidth/bins );cv::Mat histImage(histHeight, histWidth, CV_8UC3, cv::Scalar(0, 0, 0));// 使用normalize()函数将直方图的值缩放到图像的高度范围内normalize(hist, hist, 0, histImage.rows, cv::NORM_MINMAX, -1, cv::Mat());// 使用cv::line()函数绘制直线for (int i 1; ibins; i) {cv::line(histImage,Point(binWidth*(i - 1), histHeight - cvRound(hist.atfloat(i - 1))),Point(binWidth*(i), histHeight - cvRound(hist.atfloat(i))),Scalar(255, 0, 0),2,LINE_8,0);}// 显示图像和直方图cv::imshow(Image, image);cv::imshow(Histogram, histImage);waitKey();return 0; } 运行结果 彩色图像直方图 对于彩色图像你可以分别计算其颜色通道(蓝色、绿色、红色)的直方图或者将其转换为灰度图像后计算整体的亮度直方图 在这个示例中我们首先读取了一个彩色图像然后使用 cv::split() 函数将图像分离成蓝色、绿色和红色通道接着我们分别计算了每个通道的直方图最后我们绘制了各个通道的直方图并显示了原始图像和直方图 #include opencv2\opencv.hpp #include iostream #include demo.husing namespace cv; using namespace std;int main() {// 读取彩色图像cv::Mat image cv::imread(C:\\cpp\\image\\suzy2.jpg);if (image.empty()) {std::cerr Error: 无法读取图像文件. std::endl;return -1;}// 分离通道std::vectorcv::Mat bgrPlanes;cv::split(image, bgrPlanes);// 计算直方图int histSize 256; // 亮度级别的个数float range[] { 0, 256 };const float* histRange range;cv::Mat bHist, gHist, rHist;cv::calcHist(bgrPlanes[0], 1, 0, cv::Mat(), bHist, 1, histSize, histRange);cv::calcHist(bgrPlanes[1], 1, 0, cv::Mat(), gHist, 1, histSize, histRange);cv::calcHist(bgrPlanes[2], 1, 0, cv::Mat(), rHist, 1, histSize, histRange);// 绘制直方图int histWidth512, histHeight400;int binWidth cvRound( (double)histWidth/histSize );cv::Mat histImage(histHeight, histWidth, CV_8UC3, cv::Scalar(0, 0, 0));normalize(bHist, bHist, 0, histImage.rows, cv::NORM_MINMAX, -1, cv::Mat());normalize(gHist, gHist, 0, histImage.rows, cv::NORM_MINMAX, -1, cv::Mat());normalize(rHist, rHist, 0, histImage.rows, cv::NORM_MINMAX, -1, cv::Mat());for (int i1; ihistSize; i) {// 绘制蓝色分量直方图cv::line( histImage, cv::Point( binWidth*(i-1), histHeight-cvRound(bHist.atfloat(i-1)) ),cv::Point( binWidth*(i), histHeight-cvRound(bHist.atfloat(i)) ),cv::Scalar(255, 0, 0), 2, LINE_8,0);// 绘制绿色分量直方图cv::line(histImage, cv::Point( binWidth*(i-1), histHeight-cvRound(gHist.atfloat(i-1)) ),cv::Point( binWidth*(i), histHeight-cvRound(gHist.atfloat(i)) ),cv::Scalar(0, 255, 0), 2, LINE_8,0);// 绘制红色分量直方图cv::line(histImage, cv::Point( binWidth*(i-1), histHeight-cvRound(rHist.atfloat(i-1)) ),cv::Point( binWidth*(i), histHeight-cvRound(rHist.atfloat(i)) ),cv::Scalar(0, 0, 255), 2, LINE_8,0);}// 显示图像和直方图cv::imshow(Image, image);cv::imshow(Histogram, histImage);cv::waitKey(0);return 0;} 运行结果 二、二维直方图 1、什么是二维直方图 二维直方图是对彩色图像进行分析时的一个重要工具与一维直方图不同它同时考虑了两个通道的信息通常是颜色空间中的两个分量例如在HSV色彩空间中的H(色相)和S(饱和度) 2、二维直方图与直方图有哪些不同 维度直方图是一维的它只考虑了图像的亮度或色彩信息而二维直方图考虑了两个通道的信息因此是二维的通道直方图通常只针对一个通道(灰度图只有亮度通道)而二维直方图可以同时考虑多个通道通常是颜色空间中的两个分量 3、二维直方图的作用 颜色分布分析通过二维直方图我们可以了解图像中各个颜色组合的分布情况有助于理解图像的颜色特性图像分割与对象识别在图像分割和对象识别任务中二维直方图可用于将图像的颜色特征映射到特定的空间从而实现对图像中的对象进行定位和识别颜色调整与匹配通过分析二维直方图我们可以进行颜色调整使图像的颜色分布更加符合预期 4、如何绘制二维直方图 首先读取了一个彩色图像然后将其从BGR颜色空间转换为HSV颜色空间接着我们分离了H和S通道并指定了直方图的维度、通道数、亮度级别个数和范围然后我们使用 cv::calcHist()计算了二维直方图并使用 cv::rectangle()绘制 #include opencv2\opencv.hpp #include iostreamusing namespace cv; using namespace std;int main() {// 读取彩色图像cv::Mat image cv::imread(C:\\cpp\\image\\suzy2.jpg);if (image.empty()) {std::cerr Error: 无法读取图像文件. std::endl;return -1;}// 2D 直方图Mat hsv, hist;cvtColor(image, hsv, COLOR_BGR2HSV);// H通道X轴被分成了30个小区间S通道X轴被分成了32个小区间int hueBins 30, satBins 32;// 彩色图像有多个ranges所以histSize跟ranges对应也要定义多个定义成数组的形式int histSize[] { hueBins, satBins };float hueRanges[] { 0, 180 }; // H通道X轴的取值范围float satRanges[] { 0, 256 }; // S通道X轴的取值范围// 彩色图像有多个ranges定义成数组的形式const float* ranges[] { hueRanges, satRanges };// 我们要计算HSV图像的第0个通道和第1个通道的直方图所以这里channels也要定义多个int channels[] { 0, 1 };calcHist(hsv, 1, channels, Mat(), hist, 2, histSize, ranges, true, false);// 画出计算后的直方图double maxVal 0;minMaxLoc(hist, 0, maxVal, 0, 0);int scale 10;Mat histImage Mat::zeros(satBins*scale, hueBins*scale, CV_8UC3);for (int h0; hhueBins; h) {for (int s0; ssatBins; s){float binVal hist.atfloat(h, s);int intensity cvRound( binVal*255 / maxVal );rectangle(histImage, Point( h*scale, s*scale ),Point( (h1)*scale - 1, (s1)*scale - 1 ),Scalar::all(intensity),-1);}}applyColorMap(histImage, histImage, COLORMAP_JET);imshow(Image, image);imshow(H-S Histogram, histImage);cv::waitKey(0);return 0;} 运行结果 三、直方图均衡化 直方图均衡化是一种用于增强图像对比度的图像处理技术它通过重新分配图像的像素值使得整个亮度范围得到充分利用从而使图像看起来更清晰和具有更好的对比度 1、直方图均衡化的原理 计算直方图首先计算原始图像的灰度直方图这个直方图描述了图像中各个灰度级别的分布情况计算累积分布函数(CDF)将灰度直方图转换为累积分布函数CDF表示了每个灰度级别的累积概率映射新的像素值对于每个像素将其原始灰度值映射到新的值使得新的值在整个亮度范围内均匀分布 2、opencv中可以使用 cv::equalizeHist()函数来实现直方图均衡化 1cv::equalizeHist()函数原型 void cv::equalizeHist(InputArray src, OutputArray dst );参数解释 src输入图像(灰度图像) dst输出图像用于存储均衡化后的结果 2代码示例 灰度直方图均衡化 #include opencv2\opencv.hpp #include iostreamusing namespace cv; using namespace std;int main() {// 读取灰度图像cv::Mat image cv::imread(C:\\cpp\\image\\suzy2.jpg, cv::IMREAD_GRAYSCALE);if (image.empty()) {std::cerr Error: 无法读取图像文件. std::endl;return -1;}// 均衡化灰度直方图cv::Mat equalizedImage;cv::equalizeHist(image, equalizedImage);cv::imshow(Original Gray Image, grayImage);cv::imshow(Equalized Gray Image, equalizedImage);cv::waitKey(0);return 0;} 运行结果 彩色直方图均衡化 首先将彩色图像转换为HSV色彩空间然后对亮度(Value/V通道)进行均衡化最后将其转换回BGR色彩空间以显示 #include opencv2\opencv.hpp #include iostreamusing namespace cv; using namespace std;int main() {// 读取彩色图像cv::Mat image cv::imread(C:\\cpp\\image\\suzy2.jpg, cv::IMREAD_COLOR);if (image.empty()) {std::cerr Error: 无法读取图像文件. std::endl;return -1;}// 将图像从BGR色彩空间转换为HSV色彩空间cv::Mat hsvImage;cv::cvtColor(image, hsvImage, cv::COLOR_BGR2HSV);// 均衡化HSV通道的直方图std::vectorcv::Mat channels;cv::split(hsvImage, channels);cv::equalizeHist(channels[2], channels[2]);cv::Mat equalizedHSV;cv::merge(channels, equalizedHSV);cv::cvtColor(equalizedHSV, equalizedHSV, cv::COLOR_HSV2BGR);cv::imshow(Original Color Image, image);cv::imshow(Equalized Color Image, equalizedHSV);cv::waitKey(0);return 0;} 运行结果
http://www.pierceye.com/news/970928/

相关文章:

  • 网站购物建设实训心得体会中山皇冠建设开发有限公司网站
  • 做360pc网站排名首页学校网站建设工作计划
  • 网站设计与制作的基本步骤移动互联网论文
  • 建设部网站2015年第158号中国建筑材料网官网
  • 大理网站建设沛宣郑州模板建站代理
  • 新浪博客怎么上传wordpress佛山推广seo排名
  • 北京建设网站有哪些公司网络营销方法有哪几种
  • 在中国备案的网站服务器利用小说网站做本站优化
  • 网站风格的表现形式重庆观音桥房价
  • 哪些公司的网站做的很好手机网页素材
  • 天津地铁建设网站百度广告太多
  • 保定php网站制作wordpress的seo收件箱
  • 网站建设公司-跨界鱼科技优外国网站设计风格
  • 网站营销平台注册微信公众号流程
  • 西安专业网站建设服务公司商标查询网入口
  • 营销型网站设计房地产wordpress多媒体路径
  • 门户网站建设解决方案wordpress图片广告
  • 哈尔滨h5模板建站设计一个软件需要多少钱
  • 青岛网站建设方案服务惠民卡看电影怎么用
  • 兰州新站点seo加盟网站建设工作有底薪吗
  • 哈尔滨建设网站官网清远头条新闻
  • 泉州网站设计平台wordpress cenos
  • 网站内容批量替换站长之家网站素材
  • asp.net 获取网站域名展览馆展示设计
  • 网站网页设计公司家庭做网站
  • php网站开发实战的书网站开发排行榜
  • 摄影师都在哪些网站发布作品云虚拟主机搭建网站
  • 中小企业电子商务网站建设传奇手游代理平台
  • 网站建设需要每年交钱吗如何选择宣传片制作
  • 建设网站为网站网站做广告芜湖市网站建设