系列文章:
用OpenCV实现Photoshop算法(四): 色阶调整用OpenCV实现Photoshop算法(五): 亮度对比度调整
用OpenCV实现Photoshop算法(六): 变为黑白图像
用OpenCV实现Photoshop算法(七): 调整色相饱和度
用OpenCV实现Photoshop算法(九): 高反差保留
六、变为黑白图像
将彩色图片变成黑白灰度图像的算法,一般是: 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()方法 实施
灰度图像调整。
示范例程:
- #include
- #include "opencv2/core.hpp"
- #include "opencv2/imgproc.hpp"
- #include "opencv2/highgui.hpp"
-
- #include "BlackWhite.hpp"
-
- using namespace std;
- using namespace cv;
-
-
- #define BASE 200
-
- static string window_name = "photo";
- static Mat src;
- static int red = 40 + BASE;
- static int yellow = 60 + BASE;
- static int green = 40 + BASE;
- static int magenta = 60 + BASE;
- static int blue = 20 + BASE;
- static int cyan = 80 + BASE;
-
- static void callbackAdjust(int , void *)
- {
- Mat dst;
- BlackWhite b;
-
- //set params
- b.red = (red - BASE) / 100.0;
- b.yellow = (yellow - BASE) / 100.0;
- b.green = (green - BASE) / 100.0;
- b.magenta = (magenta - BASE) / 100.0;
- b.blue = (blue - BASE) / 100.0;
- b.cyan = (cyan - BASE) / 100.0;
-
- //adjust Black White
- b.adjust(src, dst);
-
- imshow(window_name, dst);
- }
-
-
- int main()
- {
- src = imread("girl.jpg");
-
- if ( !src.data ) {
- cout << "error read image" << endl;
- return -1;
- }
-
- namedWindow(window_name);
-
- //create trackbars
- createTrackbar("red", window_name, &red, 500, callbackAdjust);
- createTrackbar("yellow", window_name, &yellow, 500, callbackAdjust);
- createTrackbar("green", window_name, &green, 500, callbackAdjust);
- createTrackbar("cyan", window_name, &cyan, 500, callbackAdjust);
- createTrackbar("blue", window_name, &blue, 500, callbackAdjust);
- createTrackbar("magenta", window_name, &magenta, 500, callbackAdjust);
-
- callbackAdjust(0, 0);
-
- waitKey();
- return 0;
- }
-
运行效果:
原图:

使用默认参数值时的黑白图片效果:

调整参数值后的黑白图片效果(暗化绿背景、突出人脸(红)):
评论记录:
回复评论: