【问题标题】:Re-coloring image preserving luminance重新着色图像保持亮度
【发布时间】:2017-07-03 02:55:16
【问题描述】:

给定一个输入图像,我在考虑如何将图像重新着色为一种新颜色,以保持图像的亮度与之前的相似。
于是我写了一段幼稚的代码:

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <bits/stdc++.h>
using namespace cv;
using namespace std;

int main() {
    Mat img = imread("test2.png", 1);
    Mat hsv; cvtColor(img, hsv, CV_BGR2HSV);    
    vector<Mat > channels;split(hsv, channels);
    Mat luminance; channels[2].copyTo(luminance);
    Mat res; img.copyTo(res);
    channels.clear(); split(res, channels);
    for (int i = 0; i<res.rows; i++) {
        for (int j = 0; j<res.cols; j++) {
            channels[0].at<uchar>(i, j) = 0;
            channels[1].at<uchar>(i, j) = 0; 
            channels[2].at<uchar>(i, j) = 255;
        }
    }
    merge(channels, res);
    cvtColor(res, hsv, CV_BGR2HSV);
    channels.clear(); split(hsv, channels);
    luminance.copyTo(channels[2]);
    merge(channels, res);
    cvtColor(res, res, CV_HSV2BGR);
    imwrite("result.png", res);
    return 0;
}

我实际上只是提取了原始图像的亮度图,然后用我想要的颜色创建了一个图像,并将这个输出图像的亮度图替换为输入图像的亮度图。 但结果图像的阴影似乎更暗。有没有更好的方法来做到这一点?
输入图像: 结果图像:

【问题讨论】:

  • 能否请您附上您的输入图像以及当前结果。如果您可以使用一些图形编辑器并生成一些显示您预期结果的图像并将其附上,那就太好了。
  • @DanMašek 添加:)

标签: opencv image-processing


【解决方案1】:

我认为您正在寻找“着色”。我没有任何关于如何使用 OpenCV 进行操作的参考资料,但 Anthony Thyssen 出色的 ImageMagick 笔记 here 中有描述 - 搜索“不知何故”。如果效果是您所寻求的,也许您可​​以将其适应 OpenCV

在命令行中,使用 ImageMagick,我这样做了:

convert drop.png -fill red -tint 50% result.jpg

【讨论】:

    【解决方案2】:

    这是 Imagemagick 中的另一种方式。

    convert \( input.png -colorspace gray \) \( -clone 0 -fill red -colorize 100 \) \( -clone 0 \) -compose colorize -composite result1.png
    

    convert \( input.png -colorspace lab -channel red -separate \) \( -clone 0 -fill red -colorize 100 \) \( -clone 0 \) -compose colorize -composite result2.png
    

    convert \( input.png -colorspace hsi -channel blue -separate \) \( -clone 0 -fill red -colorize 100 \) \( -clone 0 \) -compose colorize -composite result3.png
    

    选择代表您要使用的强度/亮度的色彩空间。请参阅http://www.fmwconcepts.com/imagemagick/color2gray/index.php 我的脚本 color2gray,了解不同的色彩空间强度/亮度显示为灰色。

    【讨论】:

      猜你喜欢
      • 2015-07-02
      • 2017-01-03
      • 2012-08-28
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      • 1970-01-01
      相关资源
      最近更新 更多