【发布时间】:2019-05-24 16:40:27
【问题描述】:
我正在从事图像处理项目,我想用 opencv(opencv 4.0 with cuda suport)在 cuda 上实现它,但我不擅长 c++。 对于两个图像之间的颜色校正,我正在使用此链接中的代码:(https://answers.opencv.org/question/178127/matching-colors-between-two-pictures-in-opencv/)
我的目标是在 GPU 上实现此代码。为此,我试图重写该代码。我遇到了两个问题:
1- 是否有任何 Cuda 实现的库用于此目的? (功能相同)
2-在重写函数((do1ChnHist))中,这个循环计算一维直方图(是真的吗?):
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 函数中从主循环返回不同的答案... 谢谢...
【问题讨论】: