要检测下图中峰值的位置(在x轴上)
如果图像是垂直的,我会应用CvMinMax来定位峰值。但由于这里是水平的,我面临困难。有没有办法可以使用CvMinMax找到这个峰值? (我不想旋转图像)
作为最后一个选项,我必须搜索每一列,我不想这样做,因为这将非常昂贵。有没有优化的方法来搜索这样的峰值?
答案 0 :(得分:0)
这是一种快速方法:
cv.Reduce
一次获取所有列的总和。这为我们提供了列和的向量。cv.MinMaxLoc
,它会报告从左侧找到的第一个最小值和第一个最大值的位置(因为图像是二进制值,它为我们提供了第一个非零值)。这里是在python中实现的,它应该很容易转换为C,因为它们都是内置的opencv函数。
def find_left_max4(im):
sums = cv.CreateImage((im.width, 1), cv.IPL_DEPTH_32F, 1)
cv.Reduce(im, sums, dim=0, op=cv.CV_REDUCE_SUM)
cv.Threshold(sums, sums,200, 255, cv.CV_THRESH_BINARY)
cv.Flip(sums, flipMode=1)
return sums.width - cv.MinMaxLoc(sums)[3][0] - 1
im = cv.LoadImage('zfUHp.jpg',cv.CV_LOAD_IMAGE_GRAYSCALE)
print find_right_max4(im)
#Output:
324
我不认为你能够以速度击败这种方法。对于我的慢速计算机,它的时钟频率为54μs(比我上一篇文章快十倍)。
答案 1 :(得分:0)
逐行访问图像的像素并使用简单的距离方法。我希望你也不需要代码。