我想知道如何在图像中找到一个物体的形状并将其存储在变量中以供后续使用。例如,以下是一张图片:
我想提取出仅仅是物体的轮廓线,就像这样(我在Photoshop中处理了该图像):
我只需要图像的轮廓线,并且想要将其保存在磁盘上。目前我还没有尝试过,并且我正在使用Python 2.7。
欢迎任何建议。
谢谢!
欢迎任何建议。
谢谢!
我不建议对您的图像进行灰度处理。您似乎对红色花朵和绿色背景有兴趣。在图像中,一种简单明了的方式是确定那些红色值高于绿色值的像素与花朵相对应。
import cv2
from numpy import array
img = cv2.imread('flower.jpg')
img2 = array( 200 * (img[:,:,2] > img[:,:, 1]), dtype='uint8')
img2
清晰地显示了花的形状。若要仅获取边缘,请使用Canny边缘检测器:
edges = cv2.Canny(img2, 70, 50)
cv2.imwrite('edges.png', edges)
生成的文件edges.png
如下所示:
如果您想要的话,下一步是提取边缘的坐标。可以使用以下代码实现:
contours, hierarchy = cv2.findContours(edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
您可以在此处找到有关cv2.canny
和cv2.findContours
的文档:这里和这里。
img = cv2.imread('flower.jpg', cv2.CV_LOAD_IMAGE_GRAYSCALE)
gray1 = cv2.Canny(img, 70, 50)
cv2.imwrite('gray1.png', gray1)
生成的图像如下:
灰度处理方法展示了花朵内部结构的许多细节,好与坏取决于您的目标。
findContours
与 img2
(如上所示)相比,使用 edges
效果更好。 - Daniel由于您还没有尝试过,我建议您先试试:
以下是一些提示:
这里有一些有用的信息:http://scipy-lectures.github.io/advanced/image_processing/