Tôi đã làm việc trong một dự án thú cưng một chút về cách tìm một bóng rổ đơn giản trong một hình ảnh. Tôi đã thử một loạt hoán vị của việc sử dụng hough.circles và biến đổi, vv trong vài tuần qua nhưng tôi không thể dường như đến bất cứ nơi nào gần cô lập bóng rổ với các ví dụ mã và tinkering của riêng tôi.Làm thế nào tôi có thể pythonically chúng tôi opencv để tìm một bóng rổ trong một hình ảnh?
Dưới đây là một ví dụ ảnh: Và đây là kết quả sau khi một phiên bản đơn giản của vòng tròn tìm mã tôi đã mày mò với:
Bất cứ ai có bất cứ ý tưởng nơi tôi đã đi sai và làm thế nào Tôi có thể làm đúng không?
Dưới đây là đoạn code tôi đang loay hoay với:
import cv2
import cv2.cv as cv # here
import numpy as np
def draw_circles(storage, output):
circles = np.asarray(storage)
for circle in circles:
Radius, x, y = int(circle[0][3]), int(circle[0][0]), int(circle[0][4])
cv.Circle(output, (x, y), 1, cv.CV_RGB(0, 255, 0), -1, 8, 0)
cv.Circle(output, (x, y), Radius, cv.CV_RGB(255, 0, 0), 3, 8, 0)
orig = cv.LoadImage('basket.jpg')
processed = cv.LoadImage('basket.jpg',cv.CV_LOAD_IMAGE_GRAYSCALE)
storage = cv.CreateMat(orig.width, 1, cv.CV_32FC3)
#use canny, as HoughCircles seems to prefer ring like circles to filled ones.
cv.Canny(processed, processed, 5, 70, 3)
#smooth to reduce noise a bit more
cv.Smooth(processed, processed, cv.CV_GAUSSIAN, 7, 7)
cv.HoughCircles(processed, storage, cv.CV_HOUGH_GRADIENT, 2, 32.0, 30, 550)
draw_circles(storage, orig)
cv.imwrite('found_basketball.jpg',orig)
Thay vì tải tệp dưới dạng ảnh thang độ xám, cách tải tệp dưới dạng hình ảnh màu và thực hiện một số tiền xử lý để nhấn mạnh màu cam của bóng trước khi làm phẳng hình ảnh và chuyển nó vào bộ lọc Canny? –