gpt4 book ai didi

c++ - matlab 到 C++/openCV 归一化函数

转载 作者:太空宇宙 更新时间:2023-11-03 22:30:07 24 4
gpt4 key购买 nike

这是我的 matlab 代码:

imageData = imageData ./ toolbox.c3d.p.tprctile(imageData(xy),99.2);
imageData(imageData>1) = 1;

这是我的openCV/c++代码,矩阵dst是一个openCV矩阵
简历::垫dst

std::vector<float> result;
for (std::vector<int>::iterator it = index.begin() ; it != index.end(); ++it)
{
int ind = *it;
float temp = dst.at<float>(ind - 1);
result.push_back(temp);
}
float divider = tprctile(result,99.2);

dst = dst/ divider;

百分位数的效用函数

float Utils::tprctile(std::vector<float> channel, double pt)
{
std::sort(channel.begin(),channel.end());
int ptInd = Utilities::MatlabRound (pt/100 * channel.size() );
return channel[ptInd];

// Matlab code
// function val = tprctile(data, pt)
// data = sort(data);
// ptInd = round( pt/100 * length(data) );
// val = data(ptInd);
}

我的问题是关于 imageData(imageData>1) = 1实现此功能的最有效方法是什么——我当然可以像以前一样遍历 dst。有没有更好的办法?

最佳答案

你想要的是用 cv::threshold 截断图像。

以下应该满足您的要求:

cv::threshold(dst, dst, 1, 1, CV_THRESH_TRUNC);

这会截断所有大于 1 的值并将结果存储在 dst 中。

http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html?highlight=threshold#threshold

关于c++ - matlab 到 C++/openCV 归一化函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27893077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com