EDIT:
Использование указателя / ссылки может быть неправильным, но такое поведение OpenCV также происходит, если какие-либо переменные cv :: Mat объявлены вне блока выравнивания (в моем случае, в определении класса, членами которого они являются).
Я использую ту же логику в моем коде, что и описанную здесь , но в результате получаю странное черно-белое изображение, см. оригинал и результат . Я использую OpenCV 4.0.0 с C ++ в Visual Studio 2017 15.8.8. Предыдущие декларации:
cv::Mat *equalized_image;
cv::Mat &original_image = cv::Mat(cv::imread(file_path));
Где file_path является std :: string. Эквалайзер:
if (original_image.channels() >= 3) {
// convert to YCrCb colourspace for luminance channel
cv::cvtColor(original_image, *equalized_image, cv::COLOR_BGR2YCrCb);
// split image by channels
std::vector<cv::Mat> channels;
cv::split(*equalized_image, channels);
// equalize only the histogram of the luminance channel
cv::equalizeHist(channels[0], channels[0]);
// merge back
cv::merge(channels, *equalized_image);
// convert back to BGR colourspace
cv::Mat result;
cv::cvtColor(*equalized_image, result, cv::COLOR_YCrCb2BGR);
cv::namedWindow("Equalized");
cv::imshow("Equalized", result);
}