變為黑白圖像
將彩色圖片變成黑白灰度圖像的算法,一般是: Gray = Red * 0.299 + Green * 0.587 + Blue * 0.114
Photoshop提供了一個高級的黑白圖像調整功能, 可獲得更好的黑白圖像效果。
Photoshop設置了 red, yellow, green, cyan, blue, magenta 六個 顏色的灰度系數(系數的取值范圍是 -1 到 1),
這六個系數的初始值是:
red=0.4, yellow=0.6, green =0.4, magenta=0.6, blue=0.2, cyan=0.8
如果調大某顏色的系數值,則這種 顏色將更白。反之更黑。
用OpenCV C++實現上述功能:
1,我編寫了一個 BlackWhite類,源碼文件兩個: BlackWhite.hpp, BlackWhite.cpp
2,BlackWhite類包含六個色調的系數值,設置這些系統值,然后調用 adjust()方法 實施 灰度圖像調整。
示范例程:
1 #include <iostream>
2 #include "opencv2/core.hpp"
3 #include "opencv2/imgproc.hpp"
4 #include "opencv2/highgui.hpp"
5
6 #include "BlackWhite.hpp"
7
8 using namespace std; 9 using namespace cv; 10
11
12 #define BASE 200
13
14 static string window_name = "photo"; 15 static Mat src; 16 static int red = 40 + BASE; 17 static int yellow = 60 + BASE; 18 static int green = 40 + BASE; 19 static int magenta = 60 + BASE; 20 static int blue = 20 + BASE; 21 static int cyan = 80 + BASE; 22
23 static void callbackAdjust(int , void *) 24 { 25 Mat dst; 26 BlackWhite b; 27
28 //set params
29 b.red = (red - BASE) / 100.0; 30 b.yellow = (yellow - BASE) / 100.0; 31 b.green = (green - BASE) / 100.0; 32 b.magenta = (magenta - BASE) / 100.0; 33 b.blue = (blue - BASE) / 100.0; 34 b.cyan = (cyan - BASE) / 100.0; 35
36 //adjust Black White
37 b.adjust(src, dst); 38
39 imshow(window_name, dst); 40 } 41
42
43 int main() 44 { 45 src = imread("girl.jpg"); 46
47 if ( !src.data ) { 48 cout << "error read image" << endl; 49 return -1; 50 } 51
52 namedWindow(window_name); 53
54 //create trackbars
55 createTrackbar("red", window_name, &red, 500, callbackAdjust); 56 createTrackbar("yellow", window_name, &yellow, 500, callbackAdjust); 57 createTrackbar("green", window_name, &green, 500, callbackAdjust); 58 createTrackbar("cyan", window_name, &cyan, 500, callbackAdjust); 59 createTrackbar("blue", window_name, &blue, 500, callbackAdjust); 60 createTrackbar("magenta", window_name, &magenta, 500, callbackAdjust); 61
62 callbackAdjust(0, 0); 63
64 waitKey(); 65 return 0; 66 }
運行效果:
原圖:

使用默認參數值時的黑白圖片效果:

調整參數值后的黑白圖片效果(暗化綠背景、突出人臉(紅)):