Обнаружение хитрых краев приводит к черному изображению

#python #opencv

Вопрос:

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

 def contourSegmentation(path_to_images, image_name, path_to_save_segments):  img = cv2.imread(path_to_images image_name)  img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  img_blurred = cv2.GaussianBlur(img_gray, (25, 25), cv2.BORDER_DEFAULT)  v = np.median(img_gray)  sigma=0.33  lower = int(max(0, (1.0 - sigma) * v))  upper = int(min(255, (1.0   sigma) * v))  img_canny = cv2.Canny(img_blurred, lower, upper)    scale_percent = 30 # percent of original size  width = int(img_canny.shape[1] * scale_percent / 100)  height = int(img_canny.shape[0] * scale_percent / 100)  dim = (width, height)   # resize image  resized = cv2.resize(img_canny, dim, interpolation = cv2.INTER_AREA)     cv2.imshow("canny", resized)  cv2.waitKey(0)  cv2.DestroyAllWindows()  kernel = np.ones((5,5), np.uint8)  dilate = cv2.dilate(img_canny, kernel, iterations=1)   contours = cv2.findContours(dilate, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)  print(contours)  contours = contours[0] if len(contours) == 2 else contours[1]   image_number = 0  print(len(contours))  for contour in contours:  x,y,w,h = cv2.boundingRect(contour)  cv2.rectangle(image, (x, y), (x   w, y   h), (36,255,12), 2)  ROI = original[y:y h, x:x w]  cv2.imwrite("/home/jr/Downloads/Segments/ROI.png", ROI)  image_number  = 1  

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

1. Вы не определили «оригинал» или «изображение». Откуда они берутся? Пожалуйста, покажите весь соответствующий код. Предлагаю вам просмотреть каждый шаг, чтобы найти, где у него есть проблемы. У тебя есть какие-нибудь контуры?