给定输入图像时,我在考虑如何将图像重新着色为单一新颜色,以保持图像的亮度类似于之前的图像。
所以我写了一个天真代码:重新着色图像保持亮度
#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šekadded :) –
我的回答,或其他任何人解决了你的问题吗?如果是这样,请考虑接受它作为您的答案 - 通过点击投票计数旁边的空心绿色勾号/复选标记。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –