Я пытаюсь преобразовать изображение BGR в HSV. Когда я записываю H-канал преобразования, он имеет странную блочную структуру, которая, как я предполагаю, означает, что что-то случайно квантовалось на этом пути. Я попытался сначала преобразовать свое изображение BGR unsigned char в float, но результат тот же. Вот мой код:
// STL
#include <iostream>
// OpenCV
#include <opencv2/opencv.hpp>
void Float(const std::string& inputFilename)
{
cv::Mat image = cv::imread(inputFilename, CV_LOAD_IMAGE_COLOR); // Loads as BGR
cv::Mat floatImage;
image.convertTo(floatImage, CV_32FC3);
cv::Mat hsvImage;
cv::cvtColor(floatImage, hsvImage, CV_BGR2HSV);
std::vector<cv::Mat> hsvChannels;
cv::split(hsvImage, hsvChannels);
cv::imwrite("h_float.png", hsvChannels[0]);
}
void Original(const std::string& inputFilename)
{
cv::Mat image = cv::imread(inputFilename, CV_LOAD_IMAGE_COLOR); // Loads as BGR
cv::Mat hsvImage;
cv::cvtColor(image, hsvImage, CV_BGR2HSV);
std::vector<cv::Mat> hsvChannels;
cv::split(hsvImage, hsvChannels);
cv::imwrite("h_original.png", hsvChannels[0]);
}
int main(int argc, char* argv[])
{
std::string inputFilename = argv[1];
Original(inputFilename);
Float(inputFilename);
return EXIT_SUCCESS;
}
Есть какие-нибудь предложения относительно того, что я здесь делаю не так?