EmguCV - функция Canny выбрасывает _sr c .depth () == CV_8U - PullRequest
2 голосов
/ 05 апреля 2020

В настоящее время я работаю над проектом, в котором я использую EmguCV 4.2

Мне нужно использовать функцию Canny:

gray=gray.Canny(50, 200);

И она выдает ошибку:

 _src.depth()==CV_8U

Я заметил, что исключение возникает, только если я использую CvInvoke.Threshold () на моем изображении ранее

CvInvoke.Threshold(skeleton,img,0,255,Emgu.CV.CvEnum.ThresholdType.Binary);

Мне интересно, почему это происходит, без функции Threshold () все работает. Эта функция как-то меняет глубину моего изображения? Как мне преобразовать его обратно для использования функции Canny () без проблем?

Заранее спасибо.

1 Ответ

2 голосов
/ 06 апреля 2020

Из того, что я могу извлечь из вашего вопроса, может быть проблема с преобразованием вашего изображения в оттенки серого.

Приведенный ниже код ошибки относится к типу глубины вашего изображения, т. Е. Сколько значения цвета могут вписываться в каждый отдельный пиксель вашего изображения. В вашем случае с изображениями в оттенках серого, поскольку вы храните значения только от черного до белого с различными вариантами серого между ними, тип глубины изображения будет меньше.

_src.depth()==CV_8U

Если вы просто хотите передать изображение в функцию Canny, вы должны сначала преобразовать его в оттенки серого.

//Read in the image from a file path
Mat img = CvInvoke.Imread(filePath, ImreadModes.AnyColor);

//Convert the image to gray scale
Image<Gray, byte> gray = img.ToImage<Gray, byte>();

//Threshold the image
CvInvoke.Threshold(gray, gray, 0, 100, ThresholdType.Binary);

//Canny the thresholded image
gray = gray.Canny(50, 200);

Если вы просто хотите передать изображение в функцию Canny, не пропуская его через порог, то вы можете использовать код ниже.

//Read in the image from a file path
Mat img = CvInvoke.Imread(filePath, ImreadModes.AnyColor);

//Convert the image to gray scale
Image<Gray, byte> gray = img.ToImage<Gray, byte>();

//Canny the thresholded image
gray = gray.Canny(50, 200);
...