Как найти контуры на фильтрованном изображении нижних частот? - PullRequest
0 голосов
/ 22 мая 2019

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

Код преобразует образ парковки в двоичный файл, используя комбинацию Box Filter и матрицы ядра Edge Detection.И тогда я пытаюсь найти контуры.Теперь я знаю, что контур обнаружен в двоичном изображении, которое можно получить с помощью функции cv2.threshold (), не является ли изображение, полученное из матрицы фильтра и ядра, также двоичным изображением?

import cv2
import numpy as np
import matplotlib.pyplot as plt

img=cv2.imread('parking spot1.jpg',1)
k3 = np.array(([-1,-1,-1],[-1,8,-1],[-1,-1,-1]))
low_filter = cv2.boxFilter(img, -1, (4,4))
output_low = cv2.filter2D(low_filter, -1, k3)
plt.subplot(2, 2, 1)
plt.imshow(img)
plt.title('Original Image')

plt.subplot(2, 2, 2)
plt.imshow(output_low)
plt.title('matrix1')

plt.show()

img, ret, heirarchy = cv2.findContours(output_low, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

Что делатьты думаешь я не так делаю?Я был бы очень признателен за объяснение или направление в этом вопросе.

Заранее большое спасибо.

Ошибка, с которой я столкнулся:


Traceback (последний вызов был последним) в () ----> 1 img, ret, heirarchy = cv2.findContours (output_low, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

ошибка: OpenCV (3.4.3) /io/opencv/modules/imgproc/src/contours.cpp:199: ошибка: (-210: неподдерживаемый формат или комбинация форматов) [Пуск] FindContours поддерживает только изображения CV_8UC1 в режиме! = CV_RETR_FLOODFILL в противном случае поддерживает изображения CV_32SC1 только вфункция 'cvStartFindContours_Impl

1 Ответ

2 голосов
/ 22 мая 2019

Пожалуйста, прочитайте документацию по фильтрации правильно. Четко указано, что выход имеет тот же размер и тип, что и источник. Поэтому ваш output_low является трехмерным, и cv2.findContours не может быть применен к нему. Вы можете взять пороговое значение, как вы заявили, или просто преобразовать output_low в оттенки серого, используя:

output_low = cv2.cvtColor(output_low, cv2.COLOR_BGR2GRAY)

, а затем найдите контуры.

...