我想知道如何在图像中找到对象的形状并将其存储在变量中以供进一步使用。例如,
我想只提取形状,就像这样(我在photoshop中操作图像),
我只需要图像的轮廓,我想将它保存在磁盘上。到目前为止我没有尝试过,我使用的是python 2.7
欢迎任何建议。
提前致谢!
答案 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
如下所示:
如果需要,下一步是提取边的坐标。这可以通过以下方式完成:
contours, hierarchy = cv2.findContours(edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cv2.canny
和cv2.findContours
上的文档分别可以找到here和here。
img = cv2.imread('flower.jpg', cv2.CV_LOAD_IMAGE_GRAYSCALE)
gray1 = cv2.Canny(img, 70, 50)
cv2.imwrite('gray1.png', gray1)
生成的图像是:
灰度方法显示了花的许多内部结构。无论好坏取决于你的目标。
答案 1 :(得分:2)
由于你还没有尝试过,我建议你先试试:)。
以下是一些提示:
此处提供了一些有用的信息:http://scipy-lectures.github.io/advanced/image_processing/
答案 2 :(得分:0)