所以我目前正在开展一个项目,我需要根据特定曲线的cm来找到该区域。问题是曲线有多个颜色,每个颜色代表不同的值 Something Like This
有人可以帮我吗?图像中有多个这样的曲线。如何在Python中同时计算所有这些。
答案 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()