OpenCV 圖像色彩空間轉換與摳圖

一、知識點:

1、色彩空間轉換函數
? (1)、void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0, AlgorithmHint hint = cv::ALGO_HINT_DEFAULT );
? (2)、將圖像從一種顏色空間轉換為另一種。
? (3)、參數說明:
? ? ? src: 輸入圖像,即要進行顏色空間變換的原圖像。
?? ? ?dst: 輸出圖像,即進行顏色空間變換后的圖像。
?? ? ?code: ColorConversionCodes枚舉值,確定從什么顏色空間轉換到什么顏色空間,如: COLOR_BGR2RGB、 COLOR_BGRA2RGBA、 COLOR_BGR2GRAY、 COLOR_BGR2HSV。
?? ? ?dstCn: 指定目標圖像的通道數,若為0,則通道數由src和code決定。
?? ? ?hint: 算法提示。
? (5)、注意:
? ? ? 對于RGB色彩空間,OpenCV的通道順序是BGR,即標準24位彩色圖像,第一個字節是藍色分量,第二個字節是綠色分量,第三個字節是紅色分量,第四、第五、第六依次是第二個像素的藍、綠、紅分量,以此類推。
?? ? ?cvtColor用COLOR_BGR2RGB和用COLOR_RGB2BGR來轉換原RGB色彩空間的圖像,效果是一樣的。
?? ? ?本質上內部調用mixChannels()函數,都是將原先的B通道拷貝給目標的R通道,將原先的G通道拷貝給目標的G通道,將原先的R通道拷貝給目標的B通道。
?? ? ?
2、HSV顏色空間
? (1)、H: 色相,即什么顏色,opencv中取值范圍[0, 180]。
? (2)、S: 飽和度,即顏色有多深,opencv中取值范圍[0, 255]。
? (3)、V: 色調、純度、亮度,即顏色有多亮,opencv中取值范圍[0, 255]。
? (4)、HSV顏色范圍:
? ? ? 黑: H[0, 180],S[0, 255],V[0, 46]。
?? ? ?灰: H[0, 180],S[0, 43],V[46, 220]。
?? ? ?白: H[0, 180],S[0, 30],V[221, 255]。
?? ? ?紅: H[0, 10]、[156、 180], S[43, 255],V[46, 255]。?
?? ? ?橙: H[11, 25],S[43, 255],V[46, 255]。
?? ? ?黃: H[26, 34],S[43, 255],V[46, 255]。
?? ? ?綠: H[35, 77],S[43, 255],V[46, 255]。
?? ? ?青: H[78, 99],S[43, 255],V[46, 255]。
?? ? ?藍: H[100, 124],S[43, 255],V[46, 255]。
?? ? ?紫: H[125, 155],S[43, 255],V[46, 255]。?
? (5)、HSV比RGB更容易區分出顏色。
??
3、void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst);
? (1)、創建一個掩碼dst,將原始圖像src中滿足給定范圍[lowerb, upperb]條件的像素置255,其余置0。
? (2)、參數說明:
? ? ? src: 輸入圖像。
?? ? ?lowerb: 下界,與輸入圖像類型和通道數相同的標量。
?? ? ?upperb: 上界,與輸入圖像類型和通道數相同的標量。
?? ? ?dst: 輸出掩碼,類型為CV_8UC1。
?? ? ?
?? ? ?
二、示例代碼: 從原始綠色背景圖像中摳出人物到紅色背景圖像中

#include <iostream>
#include <opencv2/opencv.hpp>int main()
{cv::Mat src1 = cv::Mat::zeros(3, 3, CV_8UC3);src1 = cv::Scalar(100, 20, 200);std::cout << "src1:" << std::endl << src1 << std::endl;//先把原B通道給目標R通道,再把原G通道給目標G通道,再把原R通道給目標B通道。cv::Mat dst2;cv::cvtColor(src1, dst2, cv::COLOR_BGR2RGB);std::cout << "dst2:" << std::endl << dst2 << std::endl;//先把原R通道給目標B通道,再把原G通道給目標G通道,再把原B通道給目標R通道。//所以dst2和dst3的結果是一樣的。cv::Mat dst3;cv::cvtColor(src1, dst3, cv::COLOR_RGB2BGR);std::cout << "dst3:" << std::endl << dst3 << std::endl;cv::Mat src2 = cv::imread("../images/9.png");if (src2.empty()){std::cout << "load src2 image error..." << std::endl;return -1;}else{std::cout << "load src2 image ok..." << std::endl;cv::imshow("原始圖像", src2);}//轉換成HSV色彩空間后,顯示的HSV圖像顏色變了,猜測是imshow把hsvImage還是按BGR的方式顯示。cv::Mat hsvImage;cv::cvtColor(src2, hsvImage, cv::COLOR_RGB2HSV);cv::imshow("HSV圖像", hsvImage);//綠色的HSV最小值cv::Scalar(35, 43, 46),最大值cv::Scalar(77, 255, 255)。//把圖像的綠色背景在mask中對應位置置255,其余置0。cv::Mat mask;cv::inRange(hsvImage, cv::Scalar(35, 43, 46), cv::Scalar(77, 255, 255), mask);cv::imshow("mask", mask);//mask取反,綠色背景在mask中對應位置置0,其余置255。cv::bitwise_not(mask, mask);cv::imshow("mask not", mask);//創建一個紅色背景圖cv::Mat redbackImage = cv::Mat::zeros(src2.size(), src2.type());redbackImage = cv::Scalar(40, 40, 200);//摳圖拷貝到紅色背景圖上src2.copyTo(redbackImage, mask);cv::imshow("ROI區域提取", redbackImage);cv::waitKey(0);return 0;
}

輸出結果:
src1:
[100, ?20, 200, 100, ?20, 200, 100, ?20, 200;
?100, ?20, 200, 100, ?20, 200, 100, ?20, 200;
?100, ?20, 200, 100, ?20, 200, 100, ?20, 200]
dst2:
[200, ?20, 100, 200, ?20, 100, 200, ?20, 100;
?200, ?20, 100, 200, ?20, 100, 200, ?20, 100;
?200, ?20, 100, 200, ?20, 100, 200, ?20, 100]
dst3:
[200, ?20, 100, 200, ?20, 100, 200, ?20, 100;
?200, ?20, 100, 200, ?20, 100, 200, ?20, 100;
?200, ?20, 100, 200, ?20, 100, 200, ?20, 100]
load src2 image ok...


?

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

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

相關文章

高斯列主元消去法——python實現

高斯列主元消去法 1. 高斯消去法 高斯消去法是一種求解線性方程組 A x b A\mathbf{x} \mathbf{b} Axb 的方法&#xff0c;通過逐步化簡增廣矩陣&#xff0c;將其變為上三角矩陣&#xff0c;從而方便求解未知數。 線性方程組的一般形式為&#xff1a; { a 11 x 1 a 12 x…

linux下安裝elasticsearch及ik分詞器

linux下安裝elasticsearch及ik分詞器 安裝版本 linux版本&#xff1a;centos7.5 es版本&#xff1a;elasticsearch-7.14.0-linux-x86_64.tar.gz 下載地址&#xff1a;https://www.elastic.co/downloads/past-releases#elasticsearch Ik版本&#xff1a;elasticsearch-analysi…

相機Camera日志分析之三十一:高通Camx HAL十種流程基礎分析關鍵字匯總(后續持續更新中)

【關注我,后續持續新增專題博文,謝謝!!!】 上一篇我們講了:有對最普通的場景進行各個日志注釋講解,但相機場景太多,日志差異也巨大。后面將展示各種場景下的日志。 通過notepad++打開場景下的日志,通過下列分類關鍵字搜索,即可清晰的分析不同場景的相機運行流程差異…

【配置篇】告別硬編碼:多環境配置、@ConfigurationProperties與配置中心初探

摘要 本文是《Spring Boot 實戰派》系列的第五篇&#xff0c;聚焦于企業級應用開發中至關重要的配置管理。文章將首先解決開發、測試、生產環境配置不同的痛點&#xff0c;詳細介紹 Spring Boot 的 Profile&#xff08;多環境配置&#xff09; 機制。接著&#xff0c;我們將深…

代碼隨想錄算法訓練營第60期第六十三天打卡

大家好&#xff0c;我們昨天講解的是拓撲排序與Dijkstra算法的樸素版&#xff0c;其實我們大致了解了兩種算法的代碼實現&#xff0c;我們通過上次博客了解到拓撲排序其實是可以判斷圖里是否存在環&#xff0c;而Dijkstra算法則使用于非負邊權最短路的求解&#xff0c;今天我們…

linux中如何在日志里面檢索nowStage不等于1的數據的指令

你想在 Linux 中查找日志文件中 nowStage 不等于 1 的所有 JSON 行&#xff0c;當前你已經使用了&#xff1a; Bash 深色版本 grep -rn "nowStage" ./ 這個命令可以找到包含 "nowStage" 字樣的所有行及其所在的文件名和行號&#xff0c;但還不能篩選出 no…

【習題】DevEco Studio的使用

判斷題 1. 如果代碼中涉及到一些網絡、數據庫、傳感器等功能的開發&#xff0c;均可使用預覽器進行預覽。 正確(True) 錯誤(False) 正確答案: 錯誤(False) 知識點 預覽器的使用。解析&#xff1a;預覽器只支持對頁面的預覽&#xff0c;如果代碼中涉及到一些網絡、數據庫、…

SpringBoot實現簡易直播

當下直播技術已經成為各類應用不可或缺的一部分&#xff0c;從社交媒體到在線教育&#xff0c;再到電子商務和游戲領域&#xff0c;直播功能正在被廣泛應用。 本文將介紹如何使用SpringBoot框架構建一個直播流推拉系統。 一、直播技術基礎 1.1 推流與拉流概念 直播系統的核心…

xcode 各版本真機調試包下載

下載地址 https://github.com/filsv/iOSDeviceSupport 使用方法&#xff1a; 添加到下面路徑中&#xff0c;然后退出重啟xcode /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport

DL00871-基于深度學習YOLOv11的盲人障礙物目標檢測含完整數據集

基于深度學習YOLOv11的盲人障礙物目標檢測&#xff1a;開啟盲人出行新紀元 在全球范圍內&#xff0c;盲人及視覺障礙者的出行問題一直是社會關注的重點。盡管技術不斷進步&#xff0c;許多城市的無障礙設施依然未能滿足盲人出行的實際需求。尤其是在復雜的城市環境中&#xff…

Python 訓練 day46

知識點回顧&#xff1a; 不同CNN層的特征圖&#xff1a;不同通道的特征圖什么是注意力&#xff1a;注意力家族&#xff0c;類似于動物園&#xff0c;都是不同的模塊&#xff0c;好不好試了才知道。通道注意力&#xff1a;模型的定義和插入的位置通道注意力后的特征圖和熱力圖 作…

TSN交換機正在重構工業網絡,PROFINET和EtherCAT會被取代嗎?

在工業自動化持續演進的今天&#xff0c;通信網絡的角色正變得愈發關鍵。 2025年6月6日&#xff0c;為期三天的華南國際工業博覽會在深圳國際會展中心&#xff08;寶安&#xff09;圓滿落幕。作為國內工業通信領域的技術型企業&#xff0c;光路科技&#xff08;Fiberroad&…

Qwen系列之Qwen3解讀:最強開源模型的細節拆解

文章目錄 1.1分鐘快覽2.模型架構2.1.Dense模型2.2.MoE模型 3.預訓練階段3.1.數據3.2.訓練3.3.評估 4.后訓練階段S1: 長鏈思維冷啟動S2: 推理強化學習S3: 思考模式融合S4: 通用強化學習 5.全家桶中的小模型訓練評估評估數據集評估細節評估效果弱智評估和民間Arena 分析展望 如果…

yolo模型精度提升策略

總結與行動建議 立即行動&#xff1a; 顯著增加6種相似BGA的高質量、多樣化訓練數據&#xff08;2倍以上是合理起點&#xff09;。 實施針對性數據增強&#xff1a; 設計模擬BGA實際成像挑戰&#xff08;反光、模糊、視角變化&#xff09;的增強方案。 升級模型與損失函數&am…

Kafka主題運維全指南:從基礎配置到故障處理

#作者&#xff1a;張桐瑞 文章目錄 主題日常管理1. 修改主題分區。2. 修改主題級別參數。3. 變更副本數。4. 修改主題限速。5.主題分區遷移。6. 常見主題錯誤處理常見錯誤1&#xff1a;主題刪除失敗。常見錯誤2&#xff1a;__consumer_offsets占用太多的磁盤。 主題日常管理 …

使用Docker部署MySQLRedis容器與常見命令

目錄 1. 檢查WSL配置2. 設置WSL版本3. 拉取MySQL鏡像4. 驗證鏡像5. 運行MySQL容器在WSL環境中使用以下命令啟動MySQL容器查看容器/鏡像的完整信息顯式指定宿主機掛載路徑可選&#xff1a;在Windows的cmd中使用以下命令啟動MySQL容器 6. 管理容器啟動已創建的容器查看運行中的容…

01__C++入門

一、C的語法框架 首先學習一門語言&#xff0c;我們需要了解語言的基本框架&#xff0c;這一小節&#xff0c;我們學習C的歷史應用&#xff0c;c和c的區別和c的標準 二、認識C 1、C的歷史 所有的主流C編譯器都支持這個版本的C&#xff08;1998年的版本&#xff09;。 2、C的應…

2024 CKA題庫+詳盡解析| 15、備份還原Etcd

目錄 免費獲取題庫配套 CKA_v1.31_模擬系統 15、 備份還原Etcd 題目&#xff1a; 開始操作: 1&#xff09;、切換集群 2&#xff09;、登錄master并提權 3&#xff09;、備份Etcd現有數據 4&#xff09;、驗證備份數據快照 5&#xff09;、查看節點和Pod狀態 6&am…

Flotherm許可的并發用戶數限制

在電子產品熱設計領域&#xff0c;Flotherm軟件以其卓越的性能和精確的仿真能力而受到廣大用戶的青睞。然而&#xff0c;在使用Flotherm軟件時&#xff0c;了解其許可的并發用戶數限制對于優化資源配置和提升工作效率至關重要。本文將詳細介紹Flotherm軟件許可的并發用戶數限制…

讀取寶塔方法,查找容別名存放位置

可以查到對應方法 根據參數名可知 查找到 得到位置