特定物体识别。 [Python]
Specific object recognition. [Python]
我们有一项技术任务是识别传送带上的煤炭。
输入数据:带(或不带)煤的输送机照片。
输出数据: 带有传送带边界的处理图像。
(下一步是识别传送带上的煤量)
我们已尝试将图像处理为 black/white、增加对比度、模糊,但图像上 "noises" 太多了。这是第一个问题:如何去除图像上不需要的像素?
第二个问题:如何在图像上正确检测输送机(然后检测上面的煤)?
源图像示例:
问问自己为什么要用相机解决这个问题。有数百种更好、更便宜和更可靠的方法来检测传送带上是否有煤。除非还有别的东西,或者你想获得有关该煤的更多信息。
光栅、点、线或区域距离传感器(超声波、光学...)触觉开关、麦克风、称重传感器...
如果你坚持使用相机,你还有很多选择,这取决于你到底想知道什么。
最简单直接的方法是检查传送带是否看起来是空的,而不是检测煤炭本身。
还有为什么要检测传送带?我怀疑它会在你安装好相机后走开。
不确定这是否有帮助,但您可以尝试使用 Hough 变换找到三角形区域。
示例如下:
- 加载图像并将其转换为灰色
- 阈值并应用细化
- 拟合霍夫变换
例如,
import cv2
from skimage import morphology
# Load image and convert to gray
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Otsu threshold
t, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# Apply thinning
thin = morphology.thin(thresh)
show_img(thin, 'Thinned')
# Hough transform: experiment with params here
from skimage.transform import probabilistic_hough_line
lines = probabilistic_hough_line(thin, threshold=100, line_length=10, line_gap=20)
print('Total lines={0}'.format(len(lines)))
# Plot lines over the input image
for p1, p2 in lines:
cv2.line(img, p1, p2, (255, 0, 0), 4)
图片:
我们有一项技术任务是识别传送带上的煤炭。
输入数据:带(或不带)煤的输送机照片。
输出数据: 带有传送带边界的处理图像。
(下一步是识别传送带上的煤量)
我们已尝试将图像处理为 black/white、增加对比度、模糊,但图像上 "noises" 太多了。这是第一个问题:如何去除图像上不需要的像素?
第二个问题:如何在图像上正确检测输送机(然后检测上面的煤)?
源图像示例:
问问自己为什么要用相机解决这个问题。有数百种更好、更便宜和更可靠的方法来检测传送带上是否有煤。除非还有别的东西,或者你想获得有关该煤的更多信息。
光栅、点、线或区域距离传感器(超声波、光学...)触觉开关、麦克风、称重传感器...
如果你坚持使用相机,你还有很多选择,这取决于你到底想知道什么。
最简单直接的方法是检查传送带是否看起来是空的,而不是检测煤炭本身。
还有为什么要检测传送带?我怀疑它会在你安装好相机后走开。
不确定这是否有帮助,但您可以尝试使用 Hough 变换找到三角形区域。
示例如下:
- 加载图像并将其转换为灰色
- 阈值并应用细化
- 拟合霍夫变换
例如,
import cv2
from skimage import morphology
# Load image and convert to gray
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Otsu threshold
t, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# Apply thinning
thin = morphology.thin(thresh)
show_img(thin, 'Thinned')
# Hough transform: experiment with params here
from skimage.transform import probabilistic_hough_line
lines = probabilistic_hough_line(thin, threshold=100, line_length=10, line_gap=20)
print('Total lines={0}'.format(len(lines)))
# Plot lines over the input image
for p1, p2 in lines:
cv2.line(img, p1, p2, (255, 0, 0), 4)
图片: