2017-07-01 98 views
0

给定输入图像时,我在考虑如何将图像重新着色为单一新颜色,以保持图像的亮度类似于之前的图像。
所以我写了一个天真代码:重新着色图像保持亮度

#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; 
} 

什么其实我只是提取原始图像的亮度图,然后创建了我希望它是在彩色的图像,并取代亮度图该输出图像的亮度图与输入图像的亮度图。
但是由此产生的图像在阴影中似乎更暗。有没有更好的方法来做到这一点?
输入图像: This is the input image. 产生的图像: This is output which I am getting, which is darker.

+0

请问您是否附上您的输入图像以及当前结果。如果你可以使用一些图形编辑器并生成一些能够显示你的预期结果的图像,那么这将是非常好的,并且附加上这一点。 –

+0

@DanMašekadded :) –

+0

我的回答,或其他任何人解决了你的问题吗?如果是这样,请考虑接受它作为您的答案 - 通过点击投票计数旁边的空心绿色勾号/复选标记。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –

回答

0

我认为你正在寻找“着色”。我没有任何关于如何使用OpenCV的说明,但是在Anthony Thyssen的优秀作品中有描述ImageMagick笔记here - 搜索词“somehow”。也许你可以适应OpenCV,如果效果是你所寻找的。

在命令行,与ImageMagick的,我这样做:

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

enter image description here

0

这里是ImageMagick的另一种方式。

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

grayscale = rec709luma result

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

lab luminance result

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

hsi intensity result

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