Обнаружение шара глубины изображения - PullRequest
0 голосов
/ 11 июня 2018

Я работаю с Asus Xtion Pro Live Cam.И я на самом деле использую изображение глубины, чтобы обнаружить шар.Более конкретно с пакетом openni2 ros я подписываюсь на тему / camera / deep_registered / image.

На рисунке ниже вы можете увидеть 2 шара, однако только один из них обнаружен с помощью алгоритма поиска контуров opencv ....

1) Есть идеи, почему только один шар обнаружен с контурами поиска?

2) Кто-нибудь знает, означает ли зарегистрированное значение глубины, например, 71, расстояние равным 0,71 метра?Или как мне преобразовать значение серого в расстояние в метрах?

3) Если кто-нибудь знает некоторые хорошие улучшения в коде, пожалуйста, прокомментируйте :) Спасибо!

Вот мой текущий пример кода на python / opencv2:

Исходное изображение может бытьнайдено здесь: enter image description here

Начните код с python deep_detection.py 2_balls.jpg

import cv2
import numpy as np
import sys

print "{}  {}".format("Analyze this file: ", sys.argv[1])

im = cv2.imread(sys.argv[1])
imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
cv2.imshow('image',imgray)
cv2.waitKey(50)
# Thresholding - delete all points outside 60cm - 150cm
ret, thresh = cv2.threshold(imgray, 60, 150, 0)
cv2.imshow('thresh',thresh)
cv2.waitKey(50)

kernel = np.ones((7,7),np.uint8)
erosion = cv2.erode(thresh, kernel, iterations = 4)
dilation = cv2.dilate(erosion, kernel, iterations = 4)
cv2.imshow('dilation', dilation)
cv2.waitKey(50)


contours, hierarchy = cv2.findContours(dilation, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
print len(contours)
cv2.drawContours(im, contours, -1, (255,255,0), 3)
cv2.imshow('contours',im)
cv2.waitKey(50)

(x,y),radius = cv2.minEnclosingCircle(contours[8])
center = (int(x),int(y))
px = im[x, y]
print "Center Position in pixel: {} distance_value: {}".format(center, px)
radius = int(radius)
cv2.circle(im,center,radius,(255,0,0),2)
cv2.circle(im,center,1,(255,0,255),2)
cv2.imshow('result',im)
cv2.waitKey(5000)
cv2.destroyAllWindows() 

PS: Второй шар Iхотел бы обнаружить ложь прямо за первым обнаруженным мячом :)

Текущий результат: Only one ball detected :(

...