!!Предупреждение о времени выполнения: недопустимое значение, встречающееся в двойных скалярах

#python #opencv

#питон #opencv

Вопрос:

Моя цель в этом коде-измерить расстояние до черного объекта на изображении, полученном с помощью камеры, но, как указано в ошибке ниже, это событие не происходит. Код выглядит следующим образом:

 import cv2 import numpy as np  def make_coordinates(image, line_parameters):  slope, intercept = line_parameters  y1 = image.shape[0]  y2 = int(y1*(3/5))  x1 = int((y1 - intercept)/slope)  x2 = int((y2 - intercept)/slope)  return np.array([x1, y1, x2, y2]) def average_slope_intercept(image, lines):  left_fit = []  right_fit = []  if lines is not None:  for line in lines:  x1, y1, x2, y2 = line.reshape(4)  parameters = np.polyfit((x1, x2), (y1, y2), 1)  slope = parameters[0]  intercept = parameters[1]  if slope lt; 0:  left_fit.append((slope, intercept))  else:  right_fit.append((slope, intercept))  left_fit_average = np.average(left_fit, axis=0)  #right_fit_average = np.average(right_fit, axis=0)  print(left_fit_average, 'left')  #print(right_fit_average, 'right')  left_line = make_coordinates(image, left_fit_average)  #right_line = make_coordinates(image, right_fit_average)  return np.array([left_line])   def distance_to_camera(knownWidth, focalLength, perWidth):  return (knownWidth * focalLength) / perWidth # The first step in finding the distance from the object or mark in the image is to calibrate and calculate the focal length . So , We need to know : # Initialize the distance from a known object to the camera KNOWN_DISTANCE = 24.0 # Initializes the width of a known object KNOWN_WIDTH = 11.0  def canny(img):  hsv = cv2.cvtColor(img, cv2.COLOR_RBG2HSV)  black_lower = np.array([0, 0, 0])  black_upper = np.array([180, 255, 30])  black_mask = cv2.inRange(hsv, black_lower, black_upper)  kernel = 5  blur = cv2.GaussianBlur(black_mask, (kernel, kernel),0)  canny = cv2.Canny(blur, 50, 150)  return canny  def display_lines(img, lines):  line_image = np.zeros_like(img)  if lines is not None:  for line in lines:  for x1, y1, x2, y2 in line:  cv2.line(line_image, (x1, y1), (x2, y2), (255, 0, 0), 10)  return line_image   def region_of_interest(canny):  height = canny.shape[0]  width = canny.shape[1]  mask = np.zeros_like(canny)   square = np.array([[(635,478),(0,478),(281,200)]  ])  cv2.fillPoly(mask, square, 255)  masked_image = cv2.bitwise_and(canny, mask)  return masked_image  cap = cv2.VideoCapture(0) _,c_image = cap.read() marker = canny(c_image) focalLength = (marker [1][0] * KNOWN_DISTANCE) / KNOWN_WIDTH print('focalLength', focalLength) while True:  _, frame = cap.read()  canny_image = canny(frame)  cropped_canny = region_of_interest(canny_image)  lines = cv2.HoughLinesP(cropped_canny, 2, np.pi / 180, 100, np.array([]), minLineLength=40, maxLineGap=5)  averaged_lines = average_slope_intercept(frame, lines)  line_image = display_lines(frame, averaged_lines)  combo_image = cv2.addWeighted(frame, 0.8, line_image, 1, 1)  CM = distance_to_camera(KNOWN_WIDTH, focalLength, marker[1][0])  cv2.imshow("result", combo_image)  cv2.putText(frame, "%.2fft" % CM,  (frame.shape[1] - 200, frame.shape[0] - 20), cv2.FONT_HERSHEY_SIMPLEX,  2.0, (0, 255, 0), 3)  if cv2.waitKey(1) amp; 0xFF == ord('q'):  break cap.release() cv2.destroyAllWindows()  

Полученное изображение в результате написанного кода

введите описание изображения здесь

Ошибка заключается в следующем.

 gt;gt;gt; %Run mesafe.py focalLength 0.0 [-3.89346104e-01 4.41339935e 02] left mesafe.py:18: RuntimeWarning: invalid value encountered in double_scalars  return (knownWidth * focalLength) / perWidth [-3.90163497e-01 4.41415626e 02] left [-3.85150497e-01 4.40625233e 02] left [-3.93702170e-01 4.43145302e 02] left  

Комментарии:

1. попробуйте распечатать knownWidth focalLength perWidth и проверьте , действительны ли они

2. Фокусная длина и ширина показывают 0. Как я могу это исправить?

3. ты знаешь свой кодекс. вы знаете, откуда берутся ценности. используйте отладчик (pdb, отладчик python).

4. если perWidth равно 0, вы делите на 0, в этом и заключается проблема

5. вы создали функцию canny funtcino, которая использует Canny функцию opencv и имеет canny переменную, попробуйте очистить ее, и вы можете найти корень всех ваших проблем 🙂