我有一个温和的梯度背景和尖锐的前景特征的图像,我想要检测。我希望在图片中找到绿色的弧线。然而,相对于背景而言,绿色弧只是绿色的(它们是半透明的)。绿弧也只有一个或两个像素宽。
因此,对于图像的每个像素,我想减去周围像素的平均颜色。周围的5x5或10x10像素就足够了。这应该保持前景特征相对不变,但删除软背景,然后我可以选择绿色通道进一步处理。
有什么办法能有效地做到这一点吗?它不一定要特别准确,但我想在1080 p图像上运行30 on。

发布于 2016-11-06 12:04:18
您可以通过在图像上做一个简单的方框模糊,然后从原始图像中减去它:
blur(img,blurred,Size(15,15));
diff=img-blurred;我在一张1920x1080的图片上尝试了这个,模糊图像花费了25毫秒,在一个像样的规格iMac上减去了15毫秒。
如果你的背景变化不快,你可以在第二个线程中计算出几个帧空间上的模糊值,然后继续重复使用它,直到你在几个帧之后再重新计算它,那么你只能对你的30 for中的每一个帧进行15 is的减法,而不是45 is的处理。
发布于 2016-11-05 13:24:44
根据背景梯度的平滑程度,边缘检测和扩张可能对你很好。
边缘检测将输出你在样本中显示的3行,并丢弃背景梯度(同样,取决于平滑度)。膨胀的图像,然后将加厚的边缘,使您的线条轮廓更重要。
您可以将此边缘地图叠加到原始图像上,如下所示:
Mat src,edges;
//perform edge detection on src and output in edges.
Mat result;
cvtColor(edges,edges,cv2.COLOR_GRAY2BGR);//change mask to a 3 channel image
subtract(edges,src,result);
subtract(edges,result);结果应该只包含3条3种颜色的线条。从现在开始,您可以应用颜色过滤来选择绿色的。
https://stackoverflow.com/questions/40437181
复制相似问题