【发布时间】:2020-11-13 19:51:41
【问题描述】:
我已经对生物细胞进行了分割和二进制image,并使用 openCV 提取了轮廓的面积和周长。我正在尝试根据参数 q=perimeter/Sqrt(area) 使用颜色图对每个单元格进行标记和着色,但不知道从哪里开始。根据这个值,基本上每个单元格都会有一个唯一的颜色。
任何帮助将不胜感激!这是我目前所拥有的:
> #specify folders
filelocat = '/Users/kate/Desktop/SegmenterTest3/SegmentedCells/'
#process image
img = cv2.imread(str(filelocat) + 'Seg3.png')
image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(image, 60, 255, cv2.THRESH_BINARY)[1]
kernel = np.ones((20,20), np.uint8)
closing = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
#inverts image so that the objects are white (for analysis)
imagem = cv2.bitwise_not(closing)
#Find contours
cnts = cv2.findContours(imagem.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
#calculate moments and extract cell shape info
moment_dict = {}
for index, cnt in enumerate(cnts):
moment_dict[index] = cv2.moments(cnt)
obj_properties = {}
for index, (key, obj_moments) in enumerate(moment_dict.items()):
if obj_moments['m00'] > 1000 and obj_moments['m00'] < 20000:
area = obj_moments['m00']
cx = obj_moments['m10'] / obj_moments['m00']
cy = obj_moments['m01'] / obj_moments['m00']
peri = cv2.arcLength(cnts[index], True)
q = (peri/(math.sqrt(area)))
props = {}
props['q']=q
props['peri']=peri
props['area']=area
props['cx']=cx
props['cy']=cy
obj_properties[key] = props
感谢您的帮助!!
【问题讨论】:
-
颜色可以是随机的还是必须是唯一的颜色列表?
-
理想情况下,我希望使用颜色图来表示值的渐变,但任何颜色图都可以!
-
要使用特定的颜色图,您必须拥有与不同区域一样多的定义颜色,在绘制轮廓时必须知道这一点。
-
在 Google 上搜索
python opencv draw random colors。您将找到诸如stackoverflow.com/questions/28999287/generate-random-colors-rgb 和stackoverflow.com/questions/19400376/… 之类的答案,用于绘制随机颜色。
标签: python opencv image-processing image-segmentation