【发布时间】:2015-06-02 11:08:12
【问题描述】:
这是我要实现的代码行
kb = [];
for k = 1:length(nRef)
for n=1:length(dCmpInd{k})
x = [centroid(nRef{k}, 1), centroid(dCmpInd{k}(n),1)];
y = [centroid(nRef{k}, 2), centroid(dCmpInd{k}(n),2)];
[x,ind] = sort(x);
y = y(ind);
kb = [kb diff(y) / diff(x)];
end
end
theta = (atan(kb));
[N, X] = hist(abs(theta),2);
这是我的 C++ 代码:
std::vector<double> kb;
std::vector<double> theta;
for (int k = 0; k < nRef.size(); k++)
{
for (int n = 0; n < dCmpInd[k].size(); n++)
{
double x1 = centroids[nRef[k]].m_X; double x2 = centroids[dCmpInd[k][n]].m_X;
double y1 = centroids[nRef[k]].m_Y; double y2 = centroids[dCmpInd[k][n]].m_Y;
if (x1 <x2)
{
double tempdiff = (y2-y1)/(x2-x1);
kb.push_back(tempdiff);
theta.push_back(abs(atan(tempdiff)));
}
else
{
double tempdiff = (y1-y2)/(x1-x2);
kb.push_back(tempdiff);
theta.push_back(abs(atan(tempdiff)));
}
}
}
有没有快速实现的方法:
[N,X] = hist(theta,2);
我也可以使用 openCV 2.4.10,但 calcHist() 并不完全相同,我需要创建 2 个 bin。
我的输入是一维数组:
0.00598881028540019 1.56120677124307 0.00598881028540019 0.00669537049433832 1.37723800334516 1.37723800334516 1.36424594043624 1.56120677124307 0.0152220988707370
输出是:
X= 0.394793300524817 1.17240228100365
N = 4 5
【问题讨论】:
-
使用 OpenCV 的功能有什么问题?无论如何,实现自定义直方图类/函数应该是不必要的(除非你想要一些练习),有足够的示例可用。
-
@Baiz 有一个用于 matlab 的功能,您可以在其中将一维数组排序到所需的箱数中。在我的情况下= 2。我无法在 openCV 中实现这一点。也许我只是不知道怎么做,但我已经尝试过了。
-
你是如何调用 OpenCV 的 calcHist 函数的?查看documentation,参数 histSize 是您需要指定的。因为你真正想要的只是一个带有两个 bin 的直方图。
标签: c++ matlab opencv image-processing