Python 3.x 如何计算图像中两种不同类型的小种子?

Python 3.x 如何计算图像中两种不同类型的小种子?,python-3.x,opencv,image-processing,computer-vision,object-detection,Python 3.x,Opencv,Image Processing,Computer Vision,Object Detection,我有一张图片,其中大约有503颗青椒种子和4颗黑胡椒种子,如下所示: 我正试着数一数他们两个。我很熟悉用种子的大小来计算一种物体,然后除以它们所覆盖的总面积。这是一种简单的方法,但效果很好 对于上面的图像,我使用阈值方法找到了粒度,结果是197个单位,通过使用下面的代码,我可以找到种子的总数: image = Image.open('./shapes/S__14155926.jpg') arr = np.array(image) nseeds = np.sum(arr[...,2] < 1

我有一张图片,其中大约有503颗青椒种子和4颗黑胡椒种子,如下所示:

我正试着数一数他们两个。我很熟悉用种子的大小来计算一种物体,然后除以它们所覆盖的总面积。这是一种简单的方法,但效果很好

对于上面的图像,我使用阈值方法找到了粒度,结果是197个单位,通过使用下面的代码,我可以找到种子的总数:

image = Image.open('./shapes/S__14155926.jpg')
arr = np.array(image)
nseeds = np.sum(arr[...,2] < 100) / 197
print(nseeds)
504.58468309859154
image=image.open('./shapes/S_uu14155926.jpg')
arr=np.数组(图像)
nseeds=np.和(arr[…,2]<100)/197
打印(nseeds)
504.58468309859154

这个数字是大概的,在这里有几个错误的计数是没有问题的。但是,我如何找到分类为
500个小种子和4个大种子的输出,而不必训练CNN模型。我不想识别种子,只想检测和计数。

两个种子的颜色非常相似,这使得阈值设置有点困难。也许,将种子通过过滤器会更容易,因此您可以在两个不同的图像中使用您的技术。如果种子彼此很好地分开,你可以试穿一下。

首先,我找到了所有种子的面积

img=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_bin = 255-cv2.threshold(copy, 127, 255, cv2.THRESH_BINARY)[1]
S=cv2.moments(img_bin)
S['m00']

得到面积等于26607210.0像素

然后我切了5粒种子

找到他们的面积175185.0。因此,一粒小种子的平均值为35037.0

因为一颗大的种子包含大约8颗小的种子(按照上面的正常方式),所以我知道了
大约有728个小种子和4个大种子

有没有办法我可以隐藏图像中的所有chia种子并保留一个进程的辣椒种子,然后隐藏所有的辣椒种子并保留另一个进程的chia种子?我不这么认为,因为我在上面评论了几点。谢谢你的想法,但小种子总共有504个。这是很大比例的错误。