python - cv2计算密集对象

标签 python opencv

我是OpenCV的新手,正在使用python学习它。我试图使用阈值化,腐 eclipse ,覆盖功能对图像中的对象数进行计数,但此方法很成功,但是当图像中的对象非常密集且几乎看不到背景时,此技术不起作用。对于这个问题,我正在考虑为对象定义特定的大小,并计算可以容纳该大小的前景区域的数量,但是我不知道该怎么做。任何帮助表示赞赏。提前致谢

最佳答案

我认为您可以找到并连接 contours 来做到这一点。例如,这是一个矩形的cala片段!

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()

你得到这样的结果:

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

关于python - cv2计算密集对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25598329/

相关文章:

c++ - 如何使用 C++ 中的 OpenCV 以所需的 fps 捕获视频

python - 如何使用变量通过 python-barcode 生成条形码

python - 在执行 python 脚本之前切换用户

python - 为 A* 路径查找启发式计算 3 个维度的 'Diagonal Distance'

c++ - 将 cv::Mat A 的每个成员与 cv::Mat B 合并,以创建一个带有 [a(x,y),b(x,y)] 的 cv::Mat C

python - OpenCV-Python导入错误: DLL load failed: The specified module could not be found

algorithm - 检测变形线

python - 修改大量 DICOM (.dcm) 文件。

python - TensorFlow Iris load_csv_with_header( )

python - 无法从登录页面进一步移动,[django-otp]