【问题标题】:OpenCV Mat Problem: Difference between Histogram and this loopOpenCV Mat 问题:直方图和这个循环之间的区别
【发布时间】: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 函数中从主循环返回不同的答案... 谢谢...

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    Opencv 拥有你想要的所有功能

    virtual void cv::cuda::TemplateMatching::match  (   InputArray  image,
    InputArray  templ,
    OutputArray     result,
    Stream &    stream = Stream::Null() 
    )   
    
    void    cv::cuda::calcHist (InputArray src, OutputArray hist, Stream &stream=Stream::Null())
        Calculates histogram for one channel 8-bit image. More...
    
    void    cv::cuda::calcHist (InputArray src, InputArray mask, OutputArray hist, Stream &stream=Stream::Null())
        Calculates histogram for one channel 8-bit image confined in given mask. More...
    

    取决于,可以是一维数组,也可以是二维数组,取决于颜色。你应该先学习一些基本的图像处理原理。

    【讨论】:

    • 感谢您的回答,但我帖子中的链接包含两个图像的颜色直方图匹配代码,而不是模板匹配。我不能使用 calchist,因为 calchist 从 do1ChnHist 函数的主循环返回不同的答案。如果我的帖子不够清晰,请原谅。谢谢
    猜你喜欢
    • 2022-11-25
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 2011-04-07
    • 2013-05-20
    • 2023-01-26
    相关资源
    最近更新 更多