OpenCV顏色變換cvtColor

OpenCV計算機視覺開發實踐:基于Qt C++ - 商品搜索 - 京東

顏色變換是imgproc模塊中一個常用的功能。我們生活中看到的大多數彩色圖片都是RGB類型的,但是在進行圖像處理時需要用到灰度圖、二值圖、HSV(六角錐體模型,這個模型中顏色的參數分別是色調H、飽和度S、明度V)、HSI等顏色制式,對此OpenCV提供了cvtColor()函數來實現這些功能,這個函數用來進行顏色空間的轉換。隨著OpenCV版本的升級,對于顏色空間種類的支持也越來越多,因此涉及不同顏色空間之間的轉換,比如RGB和灰度的互轉、RGB和HSV的互轉等。

cvtColor函數聲明如下:

void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 );

參數說明如下:

  • src:用于輸入圖像,即要進行顏色空間變換的原圖像,可以是Mat類。
  • OutputArray dst:用于輸出圖像,即進行顏色空間變換后存儲的圖像,也可以是Mat類。
  • code:表示轉換的代碼或標識,即在此確定將什么制式的圖片轉換成什么制式的圖片。
  • dstCn:表示目標圖像通道數,默認取值為0,如果取值為0,就由src和code決定。
  • InputArray和OutputArray:都是接口類,它們可以是Mat、Mat_<T>、Mat_<T, m, n>、vector<T>、vector<vector<T>>和vector<Mat>。

函數cvtColor的作用是將一個圖像從一個顏色空間轉換到另一個顏色空間,但是當從RGB向其他類型轉換時,必須明確指出圖像的顏色通道。值得注意的是,在OpenCV中,默認的顏色制式排列是BGR而非RGB。因此,對于24位顏色圖像來說,前8位是藍色,中間8位是綠色,最后8位是紅色。

需要注意的是,cvtColor()函數不能直接將RGB圖像轉換為二值圖像,需要借助threshold函數。

我們常用的顏色空間轉換有兩種:BGR轉為灰度圖和BGR轉為HSV。下面來看一個例子,將圖像轉換為灰度圖和HSV。

【例4.1】將圖像轉換為灰度圖和HSV

?? 打開Qt Creator,新建一個控制臺工程,工程名是test。

?? 在IDE中打開main.cpp,輸入如下代碼:

#include <QDebug>
#include <opencv2/imgproc/types_c.h> // for CV_RGB2GRAY
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
using namespace cv;int main()
{Mat srcImage = imread("sky.jpg");// 判斷圖像是否加載成功if (!srcImage.data){qDebug() << "圖像加載失敗!";return false;}elseqDebug()<< "圖像加載成功!";// 顯示原圖像namedWindow("src", WINDOW_AUTOSIZE);imshow("src", srcImage);// 將圖像轉換為灰度圖,采用CV_前綴Mat grayImage;cvtColor(srcImage, grayImage, CV_RGB2GRAY);     // 將圖像轉換為灰度圖namedWindow("gray", WINDOW_AUTOSIZE);imshow("gray", grayImage);// 將圖像轉換為HSV,采用COLOR_前綴Mat HSVImage;cvtColor(srcImage, HSVImage, COLOR_BGR2HSV);    // 將圖像轉換為HSVnamedWindow("HSV", WINDOW_AUTOSIZE);imshow("HSV", HSVImage);waitKey(0);return 0;
}

保存工程并運行,結果如圖4-1所示。

圖4-1

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

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

相關文章

Hadoop----高可用搭建

目錄標題 **什么是高可用&#xff1f;****?搭建的步驟**一.jdk**安裝配置**- **要點**: 二.zookeeper**集群配置**- **要點** 三.Hadoop高可用的搭建- **要點**①環境變量的配置②配置文件的修改 ③內容分發④集群任務的初次啟動 什么是高可用&#xff1f; 通過冗余設計 自動…

【Rust 精進之路之第15篇-枚舉 Enum】定義、變體與數據關聯:表達多種可能性

系列: Rust 精進之路:構建可靠、高效軟件的底層邏輯 作者: 碼覺客 發布日期: 2025年4月20日 引言:當值擁有“選項”——超越結構體的表達力 在上一篇【結構體 Struct】中,我們學習了如何使用結構體將多個相關的數據字段組合成一個有意義的整體。結構體非常適合表示那些…

模擬實現strncat、qsort、atoi

目錄 前言 一、模擬實現strncat 參數 代碼演示&#xff1a; 二、模擬實現qsort 參數 代碼演示&#xff1a; 前言 本文主要是對strncat&#xff0c;qsort&#xff0c;atoi的模擬實現 一、模擬實現strncat C 庫函數 char *strncat(char *dest, const char *src, size_t n…

Ubuntu 系統中修改 MySQL 的 sql_mode

在 Ubuntu 系統中修改 MySQL 的 sql_mode 需要編輯 MySQL 的配置文件并重啟服務。以下是詳細步驟&#xff1a; 步驟 1&#xff1a;定位 MySQL 配置文件 MySQL 配置文件通常位于以下路徑之一&#xff08;具體取決于安裝方式&#xff09;&#xff1a; /etc/mysql/my.cnf /etc/m…

進階算法 第一課:貪心

本文遵循 CC BY-NC-ND 4.0 協議&#xff0c;作者&#xff1a; U?ェ?*U \texttt{U?ェ?*U} U?ェ?*U&#xff0c;轉載請獲得作者授權。 歡迎大家來到進階算法第一課&#xff1a;貪心&#xff1b;我會分為以下幾點為大家講解貪心&#xff1a; 什么是貪心。貪心的性質與分類。…

AI領域:MCP 與 A2A 協議的關系

一、為何會出現MCP和A2A 協議是非常重要的東西&#xff0c;只有大家都遵循統一的協議&#xff0c;整體生態才好發展&#xff0c;正如有了HTML&#xff0c;互聯網才快速發展&#xff0c;有了OpenAPI&#xff0c; API才會快速發展。 Agent目前是發展最快的領域&#xff0c;從最初…

深度學習訓練中的顯存溢出問題分析與優化:以UNet圖像去噪為例

最近在訓練一個基于 Tiny-UNet 的圖像去噪模型時&#xff0c;我遇到了經典但棘手的錯誤&#xff1a; RuntimeError: CUDA out of memory。本文記錄了我如何從復現、分析&#xff0c;到逐步優化并成功解決該問題的全過程&#xff0c;希望對深度學習開發者有所借鑒。 訓練數據&am…

FramePack V2版 - 支持首尾幀生成,支持LoRA,支持批量,支持50系顯卡,一個強大的AI視頻生成軟件 本地一鍵整合包下載

FramePack 是斯坦福大學主導開發的視頻生成框架&#xff0c;是一種用于視頻生成的下一幀&#xff08;下一幀部分&#xff09;預測神經網絡結構&#xff0c;可以逐步生成視頻。FramePack 主要開發者之一&#xff0c;就是業內大名鼎鼎的張呂敏大佬&#xff0c;AI領域的“賽博佛祖…

STM32 HAL 通用定時器延時函數

使用通用定時器TIM3&#xff0c;實現ms、us延時。 delay.c #include "delay.h" #include "stm32f1xx_hal.h"TIM_HandleTypeDef htim3;/*** brief 初始化定時器3用于延時* param 無* retval 無*/ void Delay_Init(void) {TIM_ClockConfigTypeDef sClock…

軟件功能測試和非功能測試有什么區別和聯系?

軟件測試是保障軟件質量的核心環節&#xff0c;而軟件功能測試和非功能測試作為測試領域的兩大重要組成部分&#xff0c;承擔著不同但又相互關聯的職責。 軟件功能測試指的是通過驗證軟件系統的各項功能是否按照需求規格說明書來正確實現&#xff0c;確保軟件的功能和業務流程…

使用Java調用TensorFlow與PyTorch模型:DJL框架的應用探索

在現代機器學習的應用場景中&#xff0c;Python早已成為廣泛使用的語言&#xff0c;尤其是在深度學習框架TensorFlow和PyTorch的開發和應用中。盡管Java在許多企業級應用中占據一席之地&#xff0c;但因為缺乏直接使用深度學習框架的能力&#xff0c;往往使得Java開發者對機器學…

Docker安裝beef-xss

新版的kali系統中安裝了beef-xss會因為環境問題而無法啟動&#xff0c;可以使用Docker來安裝beef-xss&#xff0c;節省很多時間。 安裝步驟 1.啟動kali虛擬機&#xff0c;打開終端&#xff0c;切換到root用戶&#xff0c;然后執行下面的命令下載beef的docker鏡像 wget https:…

metasploit(2)生成dll木馬

聲明&#xff01;本文章所有的工具分享僅僅只是供大家學習交流為主&#xff0c;切勿用于非法用途&#xff0c;如有任何觸犯法律的行為&#xff0c;均與本人及團隊無關&#xff01;&#xff01;&#xff01; 一、dll文件基本概念 DLL 是一種包含可由多個程序同時使用的代碼和數…

5V 1A充電標準的由來與技術演進——從USB誕生到智能手機時代的電力革命

點擊下面圖片帶您領略全新的嵌入式學習路線 &#x1f525;爆款熱榜 88萬閱讀 1.6萬收藏 一、起源&#xff1a;USB標準與早期電力傳輸需求 1. USB的誕生背景 1996年&#xff0c;由英特爾、微軟、IBM等公司組成的USB-IF&#xff08;USB Implementers Forum&#xff09;發布了…

使用Python設置excel單元格的字體(font值)

一、前言 通過使用Python的openpyxl庫&#xff0c;來操作excel單元格&#xff0c;設置單元格的字體&#xff0c;也就是font值。 把學習的過程分享給大家。大佬勿噴&#xff01; 二、程序展示 1、新建excel import openpyxl from openpyxl.styles import Font wb openpyxl.…

【設計模式】深入解析代理模式(委托模式):代理模式思想、靜態模式和動態模式定義與區別、靜態代理模式代碼實現

代理模式 代理模式&#xff0c;也叫委托模式。 Spring AOP 是基于動態代理來實現 AOP 的 定義 為其他對象提供一種代理 以控制對這個對象的訪問。它的作用就是通過提供一個代理類&#xff0c;讓我們在調用目標方法的時候&#xff0c;不再是直接對目標方法進行調用&#xff0c;而…

利用java語言,怎樣開發和利用各種開源庫和內部/自定義框架,實現“提取-轉換-加載”(ETL)流程的自動化

一、ETL 架構設計的核心要素? 在企業級數據處理場景中&#xff0c;ETL&#xff08;Extract-Transform-Load&#xff09;流程自動化是數據倉庫、數據湖建設的核心環節。基于 Java 生態的技術棧&#xff0c;我們可以構建分層解耦的 ETL 架構&#xff0c;主要包含以下四層結構&am…

2023藍帽杯初賽內存取證-8

也是用到pslist模塊&#xff0c;加上grep過濾”chrome“即可&#xff1a; vol.py --plugin/opt/volatility/plugins -f memdump.mem --profile Win7SP1x64 pslist | grep "chrome" 第一個是PID&#xff0c;第二個是PPID&#xff0c;第三個是線程數&#xff0c;第四個…

【C語言】動態內存的常見錯誤

前言&#xff1a; 在上章節中講解了動態內存的概念和管理的核心函數。 在本章節繼續為大家介紹動態內存的常見錯誤&#xff0c;讓大家更好的理解運用。 補充&#xff1a;使用內存函數需要頭文件<stdlib.h> 對NULL指針的解引用操作 當使用malloc、calloc或realloc等函…

uniapp-x 二維碼生成

支持X&#xff0c;二維碼生成&#xff0c;支持微信小程序&#xff0c;android&#xff0c;ios&#xff0c;網頁 - DCloud 插件市場 免費的單純用愛發電的