Ошибка в функции OpenCV2.3 cv :: split (). Одинаковые значения во всех 3 каналах
Потратив пару дней, пытаясь выяснить, почему opencv DFT даст 100% аналогичные результаты для всех трех каналов, я обнаружил, что может быть ошибка в функции split (), которую OpenCV предоставляет для разделения входного изображения на 3 одинарных. Канал изображения.
std::vector<cv::Mat> rgbChannels(3,cv::Mat(inputImage.size(),CV_64FC1));
cv::split(inputImage, rgbChannels);
После сохранения значений изображения на диск и использования средства различения файлов я обнаружил, что все значения в разделенных каналах были идентичны.
Я сделал что-то не так?
Моя работа вокруг была следующей функцией. Но это также дало мне точные идентичные значения, давая подсказку, что почему-то векторы не были правильно обработаны OpenCV.
SplitImage(cv::Mat inputImage)
{
//copy original in BGR order
std::vector<cv::Mat> splittedImage(3,cv::Mat(inputImage.size(),CV_64FC1));
cv::Mat tempImage(inputImage.size(),CV_64FC1);
for (int row = 0; row < inputImage.size().height; row++)
{
for (int col = 0; col < inputImage.size().width; col++)
{
splittedImage[0].at<double>(row, col) = inputImage.at<cv::Vec3d>(row, col)[0];
splittedImage[1].at<double>(row, col) = inputImage.at<cv::Vec3d>(row, col)[1];
splittedImage[2].at<double>(row, col) = inputImage.at<cv::Vec3d>(row, col)[2];
}
}
return splittedImage;
}
И наконец написал следующее, чтобы решить проблему
SplitImage(cv::Mat inputImage)
{
//copy original in BGR order
std::vector<cv::Mat> splittedImage(3,cv::Mat(inputImage.size(),CV_64FC1));
std::vector<cv::Mat>::iterator it;
it = splittedImage.begin();
for(int channelNo = 0; channelNo < inputImage.channels(); channelNo++)
{
cv::Mat tempImage(inputImage.size(),CV_64FC1);
for (int row = 0; row < inputImage.size().height; row++)
{
for (int col = 0; col < inputImage.size().width; col++)
{
tempImage.at<double>(row, col) = inputImage.at<cv::Vec3d>(row, col)[channelNo];
}
}
it = splittedImage.insert ( it , tempImage );
it++;
}
return splittedImage;
}
У кого-нибудь была проблема с функцией split () или я сделал что-то не так?