
Проблема: >
Я столкнулся с проблемой цвета при попытке применить выбранное значение оттенка к некоторым данным изображения с помощью OpenCV.
После применения значения оттенка +50 , цвет на выходе не похож на тот, который я вижу в Photoshop, когда проверяю результат +50.
- На первом снимке экрана показан исходное изображение без применения значения оттенка.
- На втором снимке экрана показано изображение со значением оттенка +50 в Photoshop.
- На третьем снимке экрана показано изображение со значением оттенка +50 с использованием кода OpenCV.
(как показано в : ImGui).
Как я могу настроить код, чтобы изображение выглядело похожим на изображение, настроенное с помощью значения оттенка +50 в Photoshop?
В приведенном ниже коде < strong>currentImage содержит данные изображения в формате CV::Mat, а hueFactor представляет примененное значение оттенка, равное +50.< /p>
Я реализовал следующую функцию:
Код: Выделить всё
cv::Mat apply_hue_for_data(cv::Mat ¤tImage, float hueFactor) {
// Create the output image with the same size and type as the current
image cv::Mat outputImage = currentImage.clone();
// Separate the alpha channel
std::vector channels(4);
cv::split(outputImage, channels);
cv::Mat alpha = channels[3];
// Convert the image from BGR to HSV
cv::cvtColor(outputImage, outputImage, cv::COLOR_BGRA2BGR);
cv::cvtColor(outputImage, outputImage, cv::COLOR_BGR2HSV);
// Loop through the rows
for (int y = 0; y < outputImage.rows; ++y) {
// Loop through the columns
for (int x = 0; x < outputImage.cols; ++x) {
// Retrieve the pixel value
cv::Vec3b &pixelValue = outputImage.at(y, x);
// Adjust the hue value
int hue = static_cast(pixelValue[0]) + static_cast(hueFactor * 179.0f);
// Ensure the hue value wraps around correctly within the 0-179 range
hue = hue % 180;
if (hue < 0) {
hue += 180;
}
pixelValue[0] = static_cast(hue);
}
}
// Convert the image back to BGR
cv::cvtColor(outputImage, outputImage, cv::COLOR_HSV2BGR);
// Merge the alpha channel back
std::vector bgrChannels;
cv::split(outputImage, bgrChannels);
std::vector bgraChannels = {bgrChannels[0], bgrChannels[1], bgrChannels[2], alpha};
cv::merge(bgraChannels, outputImage);
// Return the modified image data
return outputImage;
}
I have tried applying the hue value for the image data by using the above code, but after applying the hue value, the color doesn't resemble what I see in Photoshop.
Источник: https://stackoverflow.com/questions/781 ... djustments
Мобильная версия