OpenCV Recolorization

Хорошего дня!

Я не могу найти правильные условия для того, что я хочу сделать в OpenCV. Вот ситуация:

У меня есть изображение в градациях серого и цвет (BGR).

Я хочу «применить» цвет к изображению в градациях серого, но сохранить яркость и сохранить ее потом.

Мой оригинальный мыслительный процесс был:

  1. Конвертировать цвет BGR в Luv
  2. Заменить L из изображения в градациях серого
  3. Конвертировать окончательное изображение в BGR и сохранить

Это то, что я сделал до сих пор:

        cv::Mat pixelColor(1, 1, CV_8UC3, cv::Scalar(0));
pixelColor.at<cv::Vec3b>(1, 1) = cv::Vec3b(128, 255, 0); // currently hard-coded but it actually comes from another source
cv::cvtColor(pixelColor, pixelColor, CV_BGR2Luv);
pixelColor.at<cv::Vec3b>(1, 1)[0] = image.at<unsigned char>(y, x);
cv::cvtColor(pixelColor, pixelColor, CV_Luv2BGR);

Я перебираю все у и х моего изображения в градациях серого. Фактический цвет появляется в другом месте, но он гарантированно будет BGR.

Мои вопросы: (1) каков правильный термин для этого процесса? (2) где я иду не так?

0

Решение

Я полагаю, вы могли бы назвать этот процесс заменой канала или заменой канала? Вам не нужно явно перебирать пиксели в ваших изображениях.

Вероятно, было бы проще всего разделить () ваше LUV-изображение на вектор Mats.

vector<Mat> channels;
cv::split(LUVMAT,channels);

Это дает вам 3 одиночных канала Mats L, U и V в вашем векторе.

Затем замените ‘L’ Mat в векторе на Mat (одноканальный) в оттенках серого, используя стандартные векторные операции. Наконец, объедините результат обратно в 3-канальный мат.

Mat newLuma;
cv::merge(temp,newLuma);

Затем преобразуйте «newLuma» обратно в BGR.

0

Другие решения

Других решений пока нет …