如何检测斑点并裁剪成PNG文件?
我正在开发一个网页应用,但在这里遇到了一个问题。让我来解释一下我想做的事情。你可以看到第一张大图,上面有一些绿色的形状。我想把这些形状裁剪成不同的PNG文件,并且让它们的背景变得透明,就像下面那些裁剪后的图片示例。
第一张图片会由用户上传,我想把它裁剪成像上面那些示例图片一样的多个部分。这可以通过PHP的GD库或者用Python或C#写的服务器端软件来实现。但我不知道这个操作叫什么,所以不知道该用什么关键词去搜索相关信息。这和计算机视觉有关,涉及到检测图形并将它们裁剪成小块等等。任何关键词或链接都会很有帮助。
谢谢大家的帮助!
4 个回答
1
我觉得这篇维基百科的文章讲得很好,关于这个问题的内容都在这里:http://en.wikipedia.org/wiki/Blob_detection
不过我想不起来有什么现成的解决方案了(-:
4
OpenCV 提供了一个叫做 cv::findContours 的函数,用来在图像中找到相连的部分。如果你的图像是绿色和白色的对比,你可以先用 cv::split 将图像分成不同的颜色通道,然后对蓝色或红色通道使用 cv::threshold 函数(在白色区域这些通道会是白色,而在绿色区域则接近黑色),并设置参数为 THRESH_BINARY_INV
(因为你想提取的是黑暗的区域)。接着,你可以使用 cv::findContours 来检测这些区域。然后,你可以用 cv::boundingRect 计算出一个包围矩形,创建一个新的图像,大小和这个矩形一样,并用你得到的轮廓作为遮罩来填充这个新图像。
注意:这些链接是指向 C++ 的文档,但这些函数在 Python 和 C# 的封装中也应该可以使用 - 具体可以查看 http://www.emgu.com。