2014年6月8日 星期日

HW6 浮水印

題目:可見浮水印

前言

浮水印的概念其實很簡單,首先我們會有一張底圖,還有一張需要印上去的圖
然後將底圖的顏色全部*某個小於1的係數
將浮水印的圖增加10%~20% 依需求所定
再將兩張圖疊合在一起,看起來就會有浮水印的效果啦

實作

1.輸入浮水印圖先轉化為灰階
2.利用 opencv的函式 addWeighted

void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1)
Parameters:
  • src1 – first input array.
  • alpha – weight of the first array elements.
  • src2 – second input array of the same size and channel number as src1.
  • beta – weight of the second array elements.
  • dst – output array that has the same size and number of channels as the input arrays.
  • gamma – scalar added to each sum.
  • dtype – optional depth of the output array; when both input arrays have the same depth, dtype can be set to -1, which will be equivalent to src1.depth().


需要注意的是,輸入的圖片需要相同type和相同size


Demo

底圖:



















浮水印圖






















結果






2014年6月4日 星期三

HW5: RGB和HSI轉換 , 膚色辨識

(一)RGB to HSI

H: Hue
S: Saturation
I :Intensive


將  RGB modle 轉換成 HSI modle 















其  OPENCV 中有內建的HSV轉換 
但是自己實作還是可以了解比較多
所以沒去使用 OPENCV的函式


轉換步驟:
1.取得 RGB pixel值
2.將其值域 Nomalize to [0,1]

3.套用計算公式
Hue
Saturation
Intensive




結果DEMO:
由左至右為:Hue , Saturation , Intensive ,Original






(二)膚色辨識

膚色檢驗有許多方式,可以從RGB的顏色空間做判斷,可以利用邊緣檢測+RGB做判斷
可以轉型成其他顏色空間做判斷,在此我挑選了將RGB轉換成YCrCb module


YCrCb空間的膚色提取

   YCrCb是一種顏色空間,也可以說是YUV的顏色空間。Y是亮度的分量,而膚色偵測是對亮度比較敏感的,由攝像頭拍攝的RGB圖像轉化为YCrCb空間的話可以去除亮度對膚色偵測的影響。
Cr反映了RGB输入信號红色部分和RGB信號亮度值之間的差异。而CB反應的是RGB输入信號藍色部分和RGB信號亮度值之間的差異。
而我挑選膚色檢測的範圍在 
133<=Cr<=173 77<=Cb<=127 會有最好的效果

DEMO: