OpenCV成長之路(3):模仿PhotoShop中魔術棒工具
本文的主題其實是影像的色彩空間的轉換,借助一個顏色選取程式來說明OpenCV中顏色轉換函數的用法以及一些注意事項。
一、幾種常見的色彩空間:
RGB顏色空間:RGB採用加法混色法,因為它是描述各種「光」透過何種比例來產生顏色。光線從暗黑開始不斷疊加 產生顏色。 RGB描述的是紅綠藍三色光的數值。數位影像儲存方面一般都是用RGB模式,值得注意的是OpenCV里三聲道的儲存順序是BGR。
HSV,HSI:這兩個顏色格式都是根據人眼對顏色的區分來定義的格式,其中H(hue)表示色相,S(saturation)表示飽和度,V(value)表示明度,I( intensity)代表了亮度。
Lab空間:模型中均勻改變對應於在感知顏色中的均勻改變,所以我們可以把Lab想像為顏色空間中的一個點,相鄰的點靠的越近說明兩者的顏色越接近,所以Lab空間常用來度量兩個顏色的相似性。
更多色彩空間的知識可以參考:http://en.wikipedia.org/wiki/Color_space
二、OpenCV中的顏色空間轉換
OpenCV裡透過cvtColor函數來完成圖片的顏色轉換,cvtColor是在opencv2/imgproc/imgproc.hpp頭檔中定義的,它的C++介面如下:
void cvtColor(InputArray src, OutputArray 0 )src:輸入影像。 dst:輸出影像。
code:顏色轉換類型,例如:CV_BGR2Lab,CV_BGR2HSV,CV_HSV2BGR,CV_BGR2RGB。 dstCn:輸出影像的通道號,如果預設為0,則表示按輸入影像的通道數。 把image影像由BGR轉換為Lab:cvtColor(image,image,CV_BGR2Lab)三、簡單的魔術棒程式首先我們定義一個colorDetect類:class colorDetect{private: int minDist; //minium acceptable distance Vec3b target;//target color; Mat result; //the resultpublic: colorDetect(); void SetMinDistance(int dist); void SetTargetColor(uchar red,uchar green,uchar blue); void SetTargetColor(Vec3b color); //set the target color Mat process(const Mat& image); //main process};
首先我們定義一個colorDetect類:
Mat colorDetect::process(const Mat& image) { Mat ImageLab=image.clone(); result.create(image.rows,image.cols,CV_8U); //将image转换为Lab格式存储在ImageLab中 cvtColor(image,ImageLab,CV_BGR2Lab); //将目标颜色由BGR转换为Lab Mat temp(1,1,CV_8UC3); temp.at<Vec3b>(0,0)=target;//创建了一张1*1的临时图像并用目标颜色填充 cvtColor(temp,temp,CV_BGR2Lab); target=temp.at<Vec3b>(0,0);//再从临时图像的Lab格式中取出目标颜色 // 创建处理用的迭代器 Mat_<Vec3b>::iterator it=ImageLab.begin<Vec3b>(); Mat_<Vec3b>::iterator itend=ImageLab.end<Vec3b>(); Mat_<uchar>::iterator itout=result.begin<uchar>(); while(it!=itend) { //两个颜色值之间距离的计算 int dist=static_cast<int>(norm<int,3>(Vec3i((*it)[0]-target[0], (*it)[1]-target[1],(*it)[2]-target[2]))); if(dist<minDist) (*itout)=255; else (*itout)=0; it++; itout++; } return result; }
首先我們定義一個colorDetect類:
rrreee首先我們定義一個colorDetect類:
rrreee限定兩種顏色之間的距離,相當於PhotoShop中魔術棒工具的閾值。
rrreee
程式中有2點需要特別注意:
1,在將影像轉換為Lab空間後,目標顏色也需要轉換,做法是建立了臨時影像。
2,判斷兩個顏色之間的距離運算了norm函數,它的運算是norm
我們對目標顏色和閾值進行這樣的設定後可以得到一個範例的效果:
cdet.SetTargetColor(150,150,150);
cdet.SetMinDistance(50);🎜🎜🎜cdet.SetMinDistance(50);🎜🎜🎜 ):模仿PhotoShop中魔術棒工具相關文章請關注PHP中文網! 🎜
熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Photoshop的高級修圖與合成技術包括:1.使用圖層、蒙版和調整層進行基礎操作;2.通過調整圖像像素值實現修圖效果;3.利用多圖層和蒙版進行複雜合成;4.應用“液化”工具調整面部特徵;5.使用“頻率分離”技術進行細膩修圖,這些技術能提升圖像處理水平並實現專業級效果。

Photoshop的關鍵功能包括圖層與蒙版、調整工具、濾鏡與效果。 1.圖層與蒙版允許獨立編輯圖像部分。 2.調整工具如亮度/對比度可修改圖像色調和亮度。 3.濾鏡與效果可快速添加視覺效果。掌握這些功能可以幫助創意專業人士實現創意願景。

Photoshop在實際應用中非常實用且具有創造性。 1)它提供基本編輯、修復和合成功能,適合初學者和專業人士。 2)高級功能如內容識別填充和圖層樣式可提升圖像效果。 3)掌握快捷鍵和優化圖層結構能提高工作效率。

Photoshop不是免費的,但有幾種方式可以低成本或免費使用:1.免費試用期為7天,期間可體驗所有功能;2.學生和教師優惠可將成本減半,需提供學校證明;3.CreativeCloud套餐適合專業用戶,包含多種Adobe工具;4.PhotoshopElements和Lightroom為低成本替代方案,功能較少但價格更低。

你可以通過以下方式以最經濟的方式獲得Photoshop的使用權:1.利用7天的免費試用期體驗軟件功能;2.尋找學生或教師折扣,以及季節性促銷;3.使用第三方網站上的優惠券;4.訂閱AdobeCreativeCloud的月度或年度計劃。

Photoshop在數字藝術中的應用包括繪畫、插圖和圖像合成。 1)繪畫:使用畫筆、鉛筆和混合工具,藝術家可創造逼真效果。 2)插圖:通過矢量和形狀工具,藝術家可精確繪製複雜圖形並添加效果。 3)合成:利用蒙版和圖層混合模式,藝術家可將不同圖像元素無縫融合。

在Photoshop中創建視覺概念可以通過以下步驟實現:1.創建新文檔,2.添加背景層,3.使用畫筆工具繪製基本形狀,4.調整顏色和亮度,5.添加文本和圖形,6.使用蒙版進行局部編輯,7.應用濾鏡效果,這些步驟幫助設計師從零開始構建完整的視覺作品。

使用Photoshop進行品牌設計的步驟包括:1.使用鋼筆工具繪製基本形狀,2.通過圖層樣式添加陰影和高光,3.調整顏色和細節,4.使用智能對象和動作自動生成不同版本的設計。 Photoshop通過圖層和蒙版的靈活性,幫助設計師創建和優化品牌元素,從簡單的標誌到復雜的品牌指南,確保設計的一致性和專業性。
