图像处理 – 如何在图像上计数对象(堆叠的皮革)

我想在堆叠的皮革图像上计数皮革,任何图像处理的帮助都将受到欢迎。

在下面的一些python代码之后,我意识到我的代码不是一个稳健的方法,它完全取决于函数参数值和输入图像。我需要一个稳健的方法来处理这个问题。感谢您的努力。

import cv2path= r'image.bmp'im = cv2.imread(path)im = cv2.resize(im, (640,480), interpolation = cv2.INTER_AREA)cv2.imwrite('savedImage2.jpg', im) im = cv2.GaussianBlur(im, (7,7), sigmaX=31) im = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) im = cv2.inRange(im, 50, 90)cv2.imshow('image', im)cv2.waitKey(0) cv2.destroyAllWindows()

原始图像1-之前

(图像中的皮革数量=8,真实值=8)

处理后的图像1-之后

原始图像2-之前

(图像中的皮革数量=8,真实值=8)

处理后的图像2-之后


回答:

这是一个简单的想法,肯定不适合所有测试案例。请注意,您花费的时间越多,审查的图像越多,阅读的图像处理工具越多;您将获得更好的结果,并找到更好的解决方案。所以这不是您能在几分钟内得到最佳答案的事情。下一个问题是环境条件。您改变环境的次数越少,错误就越少。

import cv2import sysimport mathimport numpy as np# 加载图像org = cv2.imread(sys.path[0]+'/1.jpg')im = org.copy()H, W = im.shape[:2]# 制作一个干净的二值图像im = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)im = cv2.adaptiveThreshold(im, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)im = cv2.medianBlur(im, 5)# 切片图像顶部org = org[0:20, 0:W]im = im[0:20, 0:W]H, W = im.shape[:2]# 清理像条形码一样的线条im = cv2.GaussianBlur(im, (1,31), 31)im=cv2.threshold(im,127,255,cv2.THRESH_BINARY)[1]cv2.rectangle(im, (0, 0), (W, H), 255, 3)# 查找轮廓cnts, _ = cv2.findContours(im, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)for cnt in cnts:    x, y, w, h = cv2.boundingRect(cnt)    if w < W:        cv2.rectangle(im, (x, y), (x+w, y+h), (0, 255, 0), 1)# 计数线条lines = len(cnts)-1num = math.ceil(lines/3)print(num)# 保存并显示输出im=cv2.cvtColor(im,cv2.COLOR_GRAY2BGR)cv2.imwrite(sys.path[0]+'/1_.jpg',np.vstack((org,im)))

请注意,您的两个测试案例的边缘不同,看起来属于两种不同类型。因此,无法用一个简单的算法处理所有不同的样本是正常的。检查这些想法,改变参数,添加新想法,直到最终得到所需的结果。

输出图像:

输入图像描述

此测试案例的输出数字是8


最后,我认为如果您能将这些部分整洁地拼接在一起(缩小它们之间的间隙),并且始终从固定角度用固定相机和相同的光量拍摄,您可能会获得更好的结果。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注