В строке выше не определен порог, вероятно, он принимает к нулю, то, таким образом, обеспечивая черную картину. Кроме того, вы используете сигма 0,1, что означает практически отсутствие размытия Гаусса на первом этапе Canny. В Matlab вы можете получить оптимизированную threhold по:
[~, th] = edge(gray,'canny');
, а затем применить оптимизированный порог й умножается на некоторый множитель е (из моего опыта е должно быть между 1-3), вы должны попробовать:
edges=edge(gray,'canny',f*th,'both', sigma);
sigma is sqrt (2) по умолчанию (вы использовали 0.1 выше). После замечания:
- Matlab рассчитали оптимизированный порог в качестве процентили распределения градиентов интенсивности (вы можете увидеть конструкцию края(), если ввести «редактировать край», если я правильно помню)
- выше параметр th представляет собой вектор, состоящий из низкого и высокого порога. Matlab всегда использует low_threshold = 0,4 * high_threshold
Обычно зависит от типа изображения, но вы можете посмотреть на них: http://www.kerrywong.com/2009/05/07/canny-edge-detection -auto-thresholding/или http://stackoverflow.com/questions/4292249/automatic-calculation-of-low-and-high-thresholds-for-the-canny-operation-in-open – ZdaR
Я уже пробовал первый , и он обнаружил множество ребер, где код matlab не обнаружил ни одного. – protas
для уточнения: вы спрашиваете, как положить это 0.1 в opencv? –