cv2计算密集的对象

时间:2014-09-01 03:04:06

标签: python opencv

我是OpenCV的新手,并使用python学习。我试图使用阈值处理,侵蚀,覆盖函数来计算图像中的对象数量并且它是成功的,但是当图像中的对象非常密集并且几乎看不到背景时,这种技术不起作用。对于这个问题,我想为对象定义一个特定的大小,并计算可以容纳该大小的前景区域的数量,但我不知道如何做到这一点。任何帮助表示赞赏。提前致谢

1 个答案:

答案 0 :(得分:1)

我认为你可以通过查找和连接 contours 来做到这一点。例如,这是一个矩形的cal区域片段!

area = cv2.contourArea(cnt)
x,y,w,h = cv2.boundingRect(cnt)
rect_area = w*h

对于这样的对象:

例如使用此代码:

import cv2
import numpy as np

img = cv2.imread('star.jpg')
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(img_gray, 127, 255,0)
contours,hierarchy = cv2.findContours(thresh,2,1)
cnt = contours[0]

hull = cv2.convexHull(cnt,returnPoints = False)
defects = cv2.convexityDefects(cnt,hull)

for i in range(defects.shape[0]):
    s,e,f,d = defects[i,0]
    start = tuple(cnt[s][0])
    end = tuple(cnt[e][0])
    far = tuple(cnt[f][0])
    cv2.line(img,start,end,[0,255,0],2)
    cv2.circle(img,far,5,[0,0,255],-1)

cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

你有这样的结果:

enter image description here

您也可以将 Corner detection 与Harris或fast corner detection一起使用!