zoukankan      html  css  js  c++  java
  • 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()方法 实施 灰度图像调整。
    示范例程:
     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 }
    运行效果:
    原图:
    使用默认参数值时的黑白图片效果:

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

  • 相关阅读:
    计算机病毒的认识
    计算机病毒的认识
    围棋知多少
    围棋知多少
    工业相机基础知识(一)
    辨异 —— 逻辑之辨、人文社科观念
    辨异 —— 逻辑之辨、人文社科观念
    telnet 的使用(ping 与 telnet)
    HDU 2437 Jerboas (剪枝搜索)
    设计模式
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/13801364.html
Copyright © 2011-2022 走看看