Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image OpenCV查找沿直线的所有有效边_Image_Opencv_Labview_Edge Detection - Fatal编程技术网

Image OpenCV查找沿直线的所有有效边

Image OpenCV查找沿直线的所有有效边,image,opencv,labview,edge-detection,Image,Opencv,Labview,Edge Detection,我有一个图像,我用一种叫做Rake的方法在LabView中分析它。基本上,该方法所做的是找到图像上沿平行线的所有有效边。 (如链接底部最后一张图片所示)。 此函数的美妙之处在于,它将为您提供大于某个边缘强度的所有边缘点,并且每个边缘仅生成一个边缘点(边缘线的厚度为1像素) 我想用OpenCV做一些类似的事情。我可以想象这样做的方式是 -用我选择的过滤器解构Canny算子, -具有两个阈值的边缘值的滞后阈值 -其次是非最大值抑制 -沿该线读取像素并标记所有大于我的阈值的像素 问题是canny作为一

我有一个图像,我用一种叫做Rake的方法在LabView中分析它。基本上,该方法所做的是找到图像上沿平行线的所有有效边。 (如链接底部最后一张图片所示)。 此函数的美妙之处在于,它将为您提供大于某个边缘强度的所有边缘点,并且每个边缘仅生成一个边缘点(边缘线的厚度为1像素)

我想用OpenCV做一些类似的事情。我可以想象这样做的方式是 -用我选择的过滤器解构Canny算子, -具有两个阈值的边缘值的滞后阈值 -其次是非最大值抑制 -沿该线读取像素并标记所有大于我的阈值的像素

问题是canny作为一个束来了,我无法单独找到非最大值抑制函数。 有人知道一种类似于我描述的手术的方法吗


谢谢

我不确定我是否完全理解这个问题,但是关于非最大抑制部分:

二维非最大抑制的一种简单方法是: 放大图像。OpenCV中的膨胀将每个像素的值设置为局部邻域的max()。重复几次或使用更大的内核来获得所需的半径

然后将放大的图像与原始图像进行比较,并将具有不同值的所有像素设置为零

其余像素为局部最大值

 # some code I once used in OpenCV/Python
 # given an image, sets all pixels to zero, unless they are local maxima
 def supressNonMaxima(img):
     localMax = cvCreateImage (cvGetSize(img), IPL_DEPTH_16U, 1)
     cvDilate(img, localMax, null, 3)  # max() with radius of 3

     mask = cvCreateImage( cvGetSize(img), 8, 1)
     cvCmp(img, localMax, mask, CV_CMP_LT)

     cvSet(img,0,mask)