Я работаю над проектом обработки изображений, который я хочу реализовать на cuda с opencv (opencv 4.0 с cuda suport), и я не очень хорош в c ++.Для коррекции цвета между двумя изображениями я использую код по этой ссылке: (https://answers.opencv.org/question/178127/matching-colors-between-two-pictures-in-opencv/)
Моя цель - реализовать этот код на графическом процессоре. Для этого я попытался переписать этот код. У меня возникли две проблемы:
1- Существует ли какая-либо реализованная Cuda библиотека для этой цели? (Та же функциональность)
2- в функции перезаписи ((do1ChnHist)), она показывает, что этот цикл вычисляет гистограмму 1D (Это правда??):
for (size_t p = 0; p<img.total(); p++)
{
if (mask(p) > 0)
{
uchar c = img(p);
h(c) += 1.0;
}
}
, но я не могу заменить его на:
int histSize = 256;
float range[] = { 0, 256 }; //the upper boundary is exclusive
const float* histRange = { range };
bool uniform = false, accumulate = false;
calcHist(&img, 1, 0, Mat(), h, 1, &histSize, &histRange, uniform, accumulate);
или переписать его с помощью этого цикла (Для изменения Mat >> GpuMat в будущем. К сожалению Opencv_cuda не делаетподдержка GpuMat _ <>, из-за этого я пытался переписать цикл с Mat):
Mat h;
h = Mat::zeros(cv::Size(256, 1), CV_16U);
uchar x;
for (size_t m = 0; m < img.size().width; m++)
{
for (size_t n = 0; n < img.size().width; n++)
{
x = img.at<int>(Point(m, n));
h.at<int>(Point(int(x),0)) += 1;
}
}
, потому что эфир двух опций возвращает другой ответ из основного цикла в функции do1ChnHist ... спасибо ...