opencv 繪制坐標曲線_OpenCV手工實現灰度及RGB直方圖

#include #include#include#include#include#include#include#include#include

using namespacecv;using namespacestd;//單通道圖片直方圖繪制

void drawHist(vectornums)

{

Mat hist= Mat::zeros(600, 800, CV_8UC3);

auto Max= max_element(nums.begin(), nums.end());//max迭代器類型,最大數目

putText(hist, "Histogram", Point(150, 100), FONT_HERSHEY_DUPLEX, 1, Scalar(255, 255, 255));//*********繪制坐標系************// Point o = Point(100, 550);

Point x= Point(700, 550);

Point y= Point(100, 150);//x軸

line(hist, o, x, Scalar(255, 255, 255), 2, 8, 0);//y軸

line(hist, o, y, Scalar(255, 255, 255), 2, 8, 0);//********繪制灰度曲線***********// Point pts[256];//生成坐標點

for (int i = 0; i < 256; i++)

{

pts[i].x= i * 2 + 100;

pts[i].y= 550 - int(nums[i]*(300.0/(*Max)));//歸一化到[0, 300]//顯示橫坐標

if ((i + 1) % 16 == 0)

{string num = format("%d", i + 1);

putText(hist, num, Point(pts[i].x,570), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255));

}

}//繪制線

for (int i = 1; i < 256; i++)

{

line(hist, pts[i- 1], pts[i], Scalar(0, 255, 0), 2);

}//顯示圖像

imshow("直方圖",hist);

}//三通道圖片直方圖繪制

void drawHist(vector &r, vector &g, vector &b)

{

Mat hist= Mat::zeros(600, 800, CV_8UC3);

putText(hist,"Histogram", Point(150, 100), FONT_HERSHEY_DUPLEX, 1, Scalar(255, 255, 255));//*********繪制坐標系************// Point o = Point(100, 550);

Point x= Point(700, 550);

Point y= Point(100, 150);//x軸

line(hist, o, x, Scalar(255, 255, 255), 2, 8, 0);//y軸

line(hist, o, y, Scalar(255, 255, 255), 2, 8, 0);//********繪制灰度曲線***********// auto Max_r =max_element(r.begin(), r.end());

auto Max_g=max_element(g.begin(), g.end());

auto Max_b=max_element(b.begin(), b.end());

Point pts[3][256];//生成坐標點

for (int i = 0; i < 256; i++)

{

pts[0][i].x = i * 2 + 100;

pts[0][i].y = 550 - int(r[i] * (300.0 / (*Max_r)));//歸一化到[0, 300]

pts[1][i].x = i * 2 + 100;

pts[1][i].y = 550 - int(g[i] * (300.0 / (*Max_g)));//歸一化到[0, 300]

pts[2][i].x = i * 2 + 100;

pts[2][i].y = 550 - int(b[i] * (300.0 / (*Max_b)));//歸一化到[0, 300]//顯示橫坐標

if ((i + 1) % 16 == 0)

{string num = format("%d", i + 1);

putText(hist, num, Point(pts[0][i].x, 570), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255));

}

}//繪制線

for (int i = 1; i < 256; i++)

{

line(hist, pts[0][i - 1], pts[0][i], Scalar(255, 0, 0), 2);

line(hist, pts[1][i - 1], pts[1][i], Scalar(0, 255, 0), 2);

line(hist, pts[2][i - 1], pts[2][i], Scalar(0, 0, 255), 2);

}//顯示圖像

imshow("直方圖", hist);

}//灰度直方圖計算

void calHist(const stringimg)

{

Mat src, grey;//讀取圖象

src =imread(img);if (!src.data)

{

cout<< "Image:" + img + "讀取失敗" <

}//先轉為灰度圖

cvtColor(src, grey, COLOR_BGR2GRAY);

imshow("灰度圖", grey);//計算各灰度級像素個數

vector nums(256);for (int i = 0; i < grey.rows; i++)

{

uchar* p = grey.ptr(i);for (int j = 0; j < grey.cols; j++)

{

nums[p[j]]++;

}

}

drawHist(nums);

}//多通道直方圖計算

void calHist(const string img, intpattern)

{

Mat src, grey;//讀取圖象

src =imread(img);if (!src.data)

{

cout<< "Image:" + img + "讀取失敗" <

}

imshow("原圖像",src);//計算各灰度級像素個數

vector r(256, 0);

vector g(256, 0);

vector b(256, 0);for (int i = 0; i < src.rows; i++)

{

uchar* p = src.ptr(i);for (int j = 0; j < src.cols; j++)

{

r[p[j* 3 + 0]]++;

g[p[j* 3 + 1]]++;

b[p[j* 3 + 2]]++;

}

}

drawHist(r, g, b);

}intmain()

{string img = "D:\\trashBox\\testIMG\\tiger.jpg";

calHist(img);//計算灰度直方圖

calHist(img, 0);//計算三色直方圖

waitKey(0);return 0;

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540092.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540092.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540092.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

onnx 測試_用于ONNX的TensorRT后端

用于ONNX的TensorRT后端解析ONNX模型以使用TensorRT執行。另請參閱TensorRT文檔。有關最近更改的列表&#xff0c;請參見changelog。支持的TensorRT版本Master分支上的開發適用于具有完整維度和動態架構shape支持的TensorRT 7.2.1的最新版本。對于TensorRT的早期版本&#xff0…

paddlepaddle測試安裝_百度paddlepaddle深度學習7日入門-CV疫情特輯心得

正值疫情嚴重之日&#xff0c;作為一名研究生被迫待在家里學習&#xff0c;手頭的科研項目也嚴重受挫。。。偶然間&#xff0c;看到微信公眾號發布這門課&#xff0c;馬上報名&#xff0c;入坑&#xff01;&#xff01;&#xff01;瞬間疫情其間有學習的目標了。。該課程學習依…

apache目錄 vscode_VsCode搭建Java開發環境(Spring Boot項目創建、運行、調試)

VsCode搭建Java開發環境(Spring Boot項目創建、運行、調試)安裝如下兩個主要擴展即可&#xff0c;這兩個擴展已關聯java項目開發主要使用的maven、springboot等所需要的擴展。開始步驟&#xff1a;在 Visual Studio Code 中打開擴展視圖(CtrlShiftX)。輸入“java”搜索商店擴展…

android dp轉px的公式_Android特效專輯——自定義不一樣的Toast

大家都知道&#xff0c;Android的控件有時候很難滿足我們的需求&#xff0c;所以我們需要自定義View。自定義的方式很多&#xff0c;有繼承原生控件也有直接自定義View的&#xff0c;今天寫的是自定義的Toast&#xff0c;當然&#xff0c;這個不是復寫Toast,是換一種表達形式&a…

code iban 是有什么組成_深入淺出Zookeeper(四):客戶端的請求在服務器中經歷了什么...

作者 泊浮目 沃趣科技高級研發工程師出品 沃趣科技1. 前言當我們向zk發出一個數據更新請求時&#xff0c;這個請求的處理流程是什么樣的&#xff1f;zk又是使用了什么共識算法來保證一致性呢&#xff1f;帶著這些問題&#xff0c;我們進入今天的正文。2. 設計模式&#xff1…

Centos7: 配置IO調度

今天有同事問我個問題&#xff1a;“CentOS7如何修改IO默認的調度”&#xff0c;我這里簡單整理下如何調整的方法&#xff1a; 1、查看CentOS7下IO支持的調度 1234[rootkvm02 ~]# dmesg | grep -i scheduler [ 16.900459] io scheduler noop registered[ 16.900473] io sch…

啟動activemq_「Java」 - SpringBoot amp; ActiveMQ

一、消息隊列消息隊列中間件是分布式系統中重要的組件&#xff0c;主要解決應用耦合、異步消息、流量削鋒等問題&#xff0c;實現高性能、高可用、可伸縮和最終一致性架構&#xff0c;是大型分布式系統不可缺少的中間件。目前在生產環境中使用較多的消息隊列有ActiveMQ、Rabbit…

永不休眠怎么設置_電腦休眠后應該怎樣喚醒?

可能有朋友會碰到這種情況&#xff0c;電腦屏幕顯示正在休眠&#xff0c;而且不停的轉圈&#xff0c;這是怎么回事&#xff0c;如何喚醒?下面讓堅哥為大家分析一下吧。電腦開機顯示休眠一般根據以下幾種情況進行處理&#xff1a;1、正常電腦休眠&#xff1a;一般的是按一下電源…

配置ssl證書_Mysql配置ssl證書

本環境基于mysql5.6配置&#xff0c;通過openssl生成證書進行配置一、確認環境信息1、查看數據庫版本mysql> select version();-----------| version() |-----------| 5.6.36 |-----------2、查看數據庫是否支持ssl配置mysql> show variables like have%ssl%;-----------…

echarts散點圖中大小_echarts在地圖上繪制散點圖(任意點)

項目需求&#xff1a;在省份地圖上繪制散點圖&#xff0c;散點位置不一定是哪個城市或哪個區縣&#xff0c;即任意點通過查詢官網文檔&#xff0c;找到一個與需求類似的demo&#xff1a;&#xff0c;更改代碼&#xff0c;將中國地圖替換為省份地圖&#xff0c;省份地圖的js代碼…

如何讓圖片充滿excel單元格_如何在Excel單元格建立下拉菜單

對于一些常用的數據我們往往會希望能夠盡量快速的輸入&#xff0c;下拉菜單就是一個最簡單的解決辦法。那么如何實現下拉菜單呢&#xff1f;跟隨以下步驟&#xff0c;建立屬于自己的下拉菜單吧&#xff01;如何建立下拉菜單&#xff1f;一、確定內容&#xff1a;在單元格中&…

pgsql中float4導致java程序精度丟失_Java基礎系列02

注釋Java中支持三種注釋&#xff1a;1.單行注釋以//開始換行結束。2.多行注釋以/*開始&#xff0c;以*/結束。3.說明注釋以/**開始&#xff0c;以*/結束。關鍵字關鍵字&#xff1a;是指在程序中&#xff0c;Java已經定義好的單詞&#xff0c;具有特殊含義。例如上篇文章中Hello…

python地理位置聚類_python – 用于聚類地理位置數據的DBSCAN

我有一個緯度和經度對的數據幀.這是我的數據幀外觀.order_lat order_long0 19.111841 72.9107291 19.111342 72.9083872 19.111342 72.9083873 19.137815 72.9140854 19.119677 72.9050815 19.119677 72.9050816 19.119677 72.9050817 19.120217 72.9071218 19.120217 72.90712…

用idea建立jsp項目_用idea創建maven項目,配置tomcat詳解

用idea創建maven項目&#xff0c;配置tomcat詳解&#xff0c;電腦上得有jdk1.7&#xff0c;或者1.8&#xff0c;然后就是maven3.x吧&#xff0c;再有就是tomcat7以上下面就直接開始看圖啦&#xff1a;這個我剛剛開始沒注意細看&#xff0c;原來web app 的骨架有2個呢&#xff0…

求立方根_初一數學立方根考點詳解,立足基礎,把握題型,學會方法

初一數學實數部分&#xff0c;平方根和立方根這兩部分的知識點比較的基礎&#xff0c;但是考試中卻是經常會考&#xff0c;并且有很多的“陷阱”&#xff0c;也是讓學生猝不及防&#xff0c;今天我和同學們繼續學習交流立方根的知識點&#xff0c;通過詳解考點&#xff0c;幫助…

ctf音頻yinxie_ctf-圖片隱寫術

文件隱藏常見文件頭尾jpg 文件頭FFD8FFE0 文件尾FFD9png 文件頭89504E470D0A1A0A 文件尾AE426082gif 文件頭47494638 文件尾003Bzip 文件頭504B0304 文件尾rar 文件頭Rar! 文件尾7zip 文件頭7z集 文件尾文件分析工具binwalk,kali中集成工具&#xff0c;用于分析文件中所包含的內…

mysql負責均衡讀寫分離_MySQL讀寫分離之負載均衡

mysql官方文檔中有這么一句話&#xff1a;MySQL Proxy is currently an Alpha release and should not be used within production environments.So。。。使用haproxy來做這些事&#xff0c;以下僅供參考&#xff1a;環境配置master 192.168.1.106 master1s…

mysql使用技巧_MySQL使用不得不看的幾個小技巧

程序中寫入的一行行的SQL語句&#xff0c;如果使用了一些優化小技巧&#xff0c;定能達到事半功倍的效果。1. 優化你的MySQL查詢緩存在MySQL服務器上進行查詢&#xff0c;可以啟用高速查詢緩存。讓數據庫引擎在后臺悄悄的處理是提高性能的最有效方法之一。當同一個查詢被執行多…

mysql oracle 數據類型轉換_Mysql與Oracle之間的數據類型轉換

&lbrack;轉&rsqb;MYSQL 與 Oracle 之間的數據類型轉換

rad linux下安裝mysql_Linux(CentOS或RadHat)下MySQL源碼安裝

MySQL 5.6開始&#xff0c;需要使用g進行編譯。cmake &#xff1a;MySQL 5.5開始&#xff0c;使用cmake進行工程管理&#xff0c;cmake需要2.8以上版本。bison &#xff1a;MySQL語法解析器需要使用bison進行編譯。ncurses-devel &#xff1a;用于終端操作的開發包。zlib …