计算图像的直方图,求峰值点

程序步骤:

1.输入图像

2.灰度化

3.计算直方图

4.求峰值点

#include "../LaneDetecte_SRC/detector_lane.hpp"
#include "../common_src/unity.hpp"
#include "../common_src/common_func.hpp"
#include <chrono>
#include <thread>#include <opencv2/opencv.hpp>int main()
{for(int z = 1;z<100;z++){std::string leftName = cv::format(ROOT_DIR"/data%d/left%d.png",1,z);cv::Mat left,leftG;left = cv::imread(leftName);cv::Rect rect(0,left.rows - 200 , left.cols, 200);cv::Mat half_left(left, rect);cv::cvtColor(half_left,leftG,cv::COLOR_BGR2GRAY);cv::namedWindow( "leftG", 1);cv::imshow( "leftG", leftG);int Channels[] = { 0 };cv::Mat hist;int nHistSize[] = { 256 };float range[] = { 0, 255 };const float* fHistRanges[] = { range };cv::calcHist(&leftG, 1, Channels, cv::Mat(), hist, 1, nHistSize, fHistRanges, true, false);// 创建直方图画布int nHistWidth = 800;int nHistHeight = 600;int nBinWidth = cvRound((double)nHistWidth / nHistSize[0]);cv::Mat matHistImage(nHistHeight, nHistWidth, CV_8UC3, cv::Scalar(255, 255, 255));// 直方图归一化cv::normalize(hist, hist, 0.0, matHistImage.rows, cv::NORM_MINMAX, -1, cv::Mat());std::cout<<nHistSize[0]<<std::endl;//画值方图for (int i = 1; i < nHistSize[0]; i++){line(matHistImage,cv::Point(nBinWidth * (i - 1), nHistHeight - cvRound(hist.at<float>(i - 1))),cv::Point(nBinWidth * (i), nHistHeight - cvRound(hist.at<float>(i))),cv::Scalar(255, 0, 0),2,8,0);//std::cout<<i<<" : "<<hist.at<float>(i)<<std::endl;}std::vector<int> indexes;cv::Mat test = leftG.clone();int w = 20;bool flag;//求峰值点for(int i = 0;i<=255;i++){flag = true;for(int j = i-w;j<i+w;j++){if(j>0 && i<=255 ){if(hist.at<float>(i)<hist.at<float>(j) || hist.at<float>(i)==0){flag = false;break;}}}if(flag){if(indexes.size()>0){if(abs(indexes[indexes.size()-1]-i)>5){indexes.push_back(i);}}else if(indexes.size() == 0){indexes.push_back(i);}}}for(int i = 0;i<indexes.size();i++)std::cout<<"**********: "<<indexes[i]<<std::endl;int vw = 20;
//阈值分割if(indexes.size()>0){for(int y = 0;y<leftG.rows;y++){for(int x = 0;x<leftG.cols;x++){if(test.at<uchar>(y,x)>indexes[0]-vw && test.at<uchar>(y,x)<indexes[0]+vw){test.at<uchar>(y,x) = 0;}}imshow("test", test);}}// 显示直方图imshow("histogram", matHistImage);cv::waitKey(0);}return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线程休眠

package com.ajax; //线程休眠&#xff1a;该方法可以让当前正在执行的线程暂停一段时间&#xff0c;进入休眠等待状态让其他线程可以执行 public class Example04 {public static void main(String[] args) throws Exception{new Thread(new SleepThread()).start();for(int i…

HUE 打开 WorkFlow异常 Operation category READ is not supported in state standby

异常&#xff1a;在hue上配置的一些定时任务突然停止执行。 1.打开页面HUE->WorkFlow 发现页面异常&#xff0c;无法进入WorkFlow&#xff0c;如下图 2.查看HUE日志 查看到WebHdfsException异常&#xff0c;访问HDFS文件浏览器报错&#xff0c; [26/Jun/2019 09:29:55 080…

失败的面试经历

最近感觉在这家公司实在是干不下去了。于是就投简历面试吧。想要找到下家&#xff0c;首先是要写好自己的简历&#xff0c;于是呼&#xff0c;想想自己这几年干过的东西&#xff0c;呼拉一下全写上去了。然后就在招聘网站上逢C/C职位就投。于是就等来了不少面试机会&#xff0c…

opencv 常用操作 c++

图像水平垂直方向拼接: cv::vconcat&#xff08;B,C&#xff0c;A&#xff09;; // 等同于A[B ;C] cv::hconcat&#xff08;B,C&#xff0c;A&#xff09;; // 等同于A[B C] 初始化Mat: cv::Mat edgeDest(cv::Size(10,10), CV_8UC1, cv::Scalar(0)); double a[3][3] { 0.…

hdfs fsck命令查看HDFS文件对应的文件块信息(Block)和位置信息(Locations)

关键字&#xff1a;hdfs fsck、block、locations 在HDFS中&#xff0c;提供了fsck命令&#xff0c;用于检查HDFS上文件和目录的健康状态、获取文件的block信息和位置信息等。 fsck命令必须由HDFS超级用户来执行&#xff0c;普通用户无权限。 [hadoopdev ~]$ hdfs fsck Usage…

线程让步

package com.ajax; //线程让步&#xff1a;通过yield方法来实现&#xff0c;该方法和sleep方法有点相似&#xff0c;都可以让当前正在运行的线程暂停&#xff0c;区别在于yield方法不会阻塞该线程&#xff0c;他只是将线程转换为就绪状态&#xff0c;让系统的调度器 //重新调度…

tcp连接超时处理

设置connect超时很简单&#xff0c;CSDN上也有人提到过使用select&#xff0c;但却没有一个令人满意与完整的答案。偶所讲的也正是select函数&#xff0c;此函数集成在winsock1.1中&#xff0c;简单点讲&#xff0c;"作用使那些想避免在套接字调用过程中被锁定的应用程序&…

Hbase Native memory allocation (mmap) failed to map xxx bytes for committing reserved memory

新启动测试环境Hbase报错&#xff0c;报错日志如下 # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 31715688448 bytes for committing reserved memory. # An error report file with mo…

Tcp设置发送和接收超时

linux和windows下用setsockopt设置SO_SNDTIMEO,SO_RCVTIMEO的参数的一点区别 UDP的socket在某些情况&#xff1a;如对方关闭时&#xff0c;本地可能sendto不出去数据&#xff0c;然后recvfrom就会被阻塞&#xff0c;这时就需要设置 这两个参数的值提高程序质量。 linux: …

线程插队

package com.ajax; //线程插队 public class Example06 {public static void main(String[] args)throws Exception{Thread tnew Thread(new EmergencyThread(),"线程一");t.start();for(int i0;i<6;i){System.out.println(Thread.currentThread().getName()"…

txt记录位置 c++,python显示位置

///c 写/ std::ofstream lane_postion_log(ROOT_DIR"/build/lane_position_log.txt");//创建文件 lane_postion_log <<p.x<<","<<p.y<<","<<p.z<<endl;//写位置 lane_postion_log.close(); //python显示…

CDH Yarn资源动态分配 - 指定资源限制 公平调度具体设置

日常工作中会涉及到各种资源分配等问题&#xff0c;跨部门&#xff0c;跨业务等等&#xff0c;这里介绍基于CDH版本的Yarn 公平调度&#xff08;实际使用DRF调度&#xff09; 不同时间配置不同资源参考&#xff08;计划模式&#xff09;&#xff1a;https://datamining.blog.cs…

为什么TCP是三次握手

TCP 三次握手 首先简单介绍一下TCP三次握手 在TCP/IP协议中&#xff0c;TCP协议提供可靠的连接服务&#xff0c;采用三次握手建立一个连接。 第一次握手&#xff1a;建立连接时&#xff0c;客户端发送syn包(synj)到服务器&#xff0c;并进入SYN_SEND状态&#xff0c;等待服务…

线程安全

package com.ajax; //线程安全 public class Example07 {public static void main(String[] args){SaleThread saleThreadnew SaleThread();new Thread(saleThread,"线程一").start();new Thread(saleThread,"线程二").start();new Thread(saleThread,&quo…

CDH 配置YARN动态资源池的计划模式,根据时间划分资源,不同时间不同队列使用不同资源

公平调度配置可参考&#xff1a;http://datamining.blog.csdn.net/article/details/94554469 目录 计划模式设置 队列资源抢占分配 计划模式设置 1.创建计划规则 2.设置白天配置&#xff0c;可以根据业务选择具体配置计划&#xff0c;调整资源&#xff0c;选择每天&#xff…

java集合类总结

Collection&#xff1a;单列集合类的跟接口&#xff0c;用于存储一系列符合某种规则的元素&#xff0c;它有两个重要的子接口&#xff0c;分别时List和Set还有Queue。其中List的特点时元素有序&#xff0c;元素可重复&#xff0c;Set的特点时元素无序且不可重复&#xff0c;Que…

c++ 获取数据类型最大值或最小值

范例&#xff1a; double min_dist numeric_limits<double>::max(); double max_dist numeric_limits<double>::min();

TCP为什么是四次挥手

TCP 3次握手 客户端向服务器发送一个SYN&#xff08;包含了SYN&#xff0c;SEQ&#xff09;。 当服务器接收到客户端发过来的SYN时&#xff0c;会向客户端发送一个SYNACK的数据包&#xff0c;其实ACK的ack等于上一次发送SYN数据包的&#xff08;SYNSEQ&#xff09;。 当客户…

Kudu 基本操作,详细操作讲解

kudu与Apache Impala紧密集成&#xff0c;允许您使用Impala使用Impala的SQL语法从Kudu平板中插入、查询、更新和删除数据&#xff0c;以替代使用Kudu API来构建自定义的Kudu应用程序。此外&#xff0c;您还可以使用JDBC或ODBC将使用任何语言、框架或商业智能工具编写的现有或新…

c++ 随机分布

uniform_distribution 模板定义了可以产生随机浮点值的分布对象类型&#xff0c;默认是 double 类型。默认构造函数创建的是标准正态分布&#xff0c;因此期望是 0&#xff0c;方差是 1.0: normal_distribution<double> disX(0, 1.0); uniform_real_distribution 类模板…