如何使用python查找图像中对象的形状

时间:2014-04-24 06:37:05

标签: python image

我想知道如何在图像中找到对象的形状并将其存储在变量中以供进一步使用。例如,

enter image description here

我想只提取形状,就像这样(我在photoshop中操作图像),

enter image description here

我只需要图像的轮廓,我想将它保存在磁盘上。到目前为止我没有尝试过,我使用的是python 2.7

欢迎任何建议。

提前致谢!

3 个答案:

答案 0 :(得分:6)

我不建议您的图像使用灰度。您似乎对 red flower与 green 背景感兴趣。一种简单明了的方法,可以在图像中进行区分,以便在花中识别红色值高于其绿色值的任何像素。

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如下所示:

enter image description here

如果需要,下一步是提取边的坐标。这可以通过以下方式完成:

contours, hierarchy = cv2.findContours(edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

cv2.cannycv2.findContours上的文档分别可以找到herehere

更多:如果使用灰度,会发生什么:

img = cv2.imread('flower.jpg', cv2.CV_LOAD_IMAGE_GRAYSCALE)
gray1 = cv2.Canny(img, 70, 50)
cv2.imwrite('gray1.png', gray1)

生成的图像是:

enter image description here

灰度方法显示了花的许多内部结构。无论好坏取决于你的目标。

答案 1 :(得分:2)

由于你还没有尝试过,我建议你先试试:)。

以下是一些提示:

  • 将图像转换为灰度
  • 将灰度图像保存为numpy数组
  • 制作直方图以计算图像中的等级
  • 应用阈值,以删除背景
  • 您可以尝试自适应阈值(在网上查看)
  • 应用边缘检测算法(如Canny)
  • 使用形态学数学如侵蚀,扩张来获得更好的结果

此处提供了一些有用的信息:http://scipy-lectures.github.io/advanced/image_processing/

答案 2 :(得分:0)