如何在python中找到坐标未知的曲线区域?

时间:2018-01-20 04:37:47

标签: python opencv image-processing

所以我目前正在开展一个项目,我需要根据特定曲线的cm来找到该区域。问题是曲线有多个颜色,每个颜色代表不同的值 Something Like This

有人可以帮我吗?图像中有多个这样的曲线。如何在Python中同时计算所有这些。

2 个答案:

答案 0 :(得分:0)

1,分离出不同颜色的斑点。它们看起来像是由其他一些绘图软件生成的,所以大概是颜色是固定的和已知的。为每种颜色制作新图像

2,对于仅包含固定颜色和黑色背景的斑点的图像,您可以绘制轮廓的轮廓(请参阅findContours)。 Opencv将为每个blob提供单独的轮廓。

3,计算每个轮廓的面积 - 这是一个opencv函数。

答案 1 :(得分:0)

您可以使用以下代码以像素为单位打印区域。要获得cm ^ 2的面积,您需要知道像素与实际长度之间的关系。

以下代码打印图像中最大斑点的区域。 要获取图像中所有斑点的区域,只需将[c]替换为contours

import cv2
import numpy as np 


img = cv2.imread("image.png", 0)
blank = np.zeros_like(img)

ret, thresh = cv2.threshold(img, 0 ,255, cv2.THRESH_BINARY)
im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

if( len(contours) != 0 ):
    c = max(contours, key = cv2.contourArea)
    cv2.drawContours(blank, [c], -1, 255, -1)
    print cv2.countNonZero(blank)

cv2.imshow("img", blank)
cv2.waitKey(0)
cv2.destroyAllWindows()

编辑:

import cv2
import numpy as np 

img = cv2.imread("images.png", 0)
blank = np.zeros_like(img)

ret, thresh = cv2.threshold(img, 0 ,255, cv2.THRESH_BINARY)
im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

for i in range(len(contours)):
    cv2.drawContours(blank, contours[i], -1, 255, -1)
    print "area of contour " + str(i)+" = " + str(cv2.contourArea(contours[i]))
    cv2.imshow("img", blank)
    cv2.waitKey(0)
cv2.destroyAllWindows()