Бинарное изображение OpenCV получает только белые пиксели не работают - PullRequest
1 голос
/ 14 марта 2011

Я делаю некоторую обработку изображений, чтобы узнать, я использую openCV с новым интерфейсом C ++.

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

Вопрос в том, возвращает ли функция Canny изображение в градациях серого или двоичное изображение? Я использую двойной цикл for для проверки значений пикселей в изображении, полученных в результате применения детектора контуров, и у меня много значений совершенно разных. В двоичном изображении должно быть только два значения 0 или 1 (0 или 255) ... Как я могу это сделать?

Мой код:

imagen = imread(nombre_imagen,0); //lee la imagen en escala de grises
equalizeHist(imagen,imagen);
Canny(binary,binary,0.66*threshold,1.33*threshold,3,true);
for(int i=0;i<binary.rows;i++){
    for(int j=0;j<binary.cols;j++){
       std::cout << binary.at<float>(i,j)<< ",";
    }
    std::cout << "\n";
}

Это матрица 183x183, и я могу видеть множество значений, даже некоторые nan. Как я могу сделать этот двоичный файл?

Для функции Канни я использую пороговое значение, получая «среднее» значение изображения в градациях серого; Я видел это здесь: http://www.kerrywong.com/2009/05/07/canny-edge-detection-auto-thresholding/.

Ответы [ 2 ]

1 голос
/ 28 апреля 2011

Двоичные изображения имеют тип uchar, который необходимо преобразовать в int (или unsigned int), если вы хотите диапазон 0-255:

for(int i=0;i<edges.rows;i++) {
    for(int j=0;j<edges.cols;j++) {
       std::cout << (int)edges.at<uchar>(i,j)<< ",";
    }
    std::cout << "\n";
}

Вам следует избегать каста в стиле C, но я оставлю это в качестве упражнения для читателя.

0 голосов
/ 15 марта 2011

Документация (http://opencv.willowgarage.com/documentation/cpp/imgproc_feature_detection.html?highlight=canny#Canny) гласит:

void Canny (const Mat & image, Mat & ребра, двойной порог1, двойной порог2, int apertureSize = 3, bool L2gradient = false)

Второй параметр - ребра - Карта выходных ребер.Он будет иметь тот же размер и тот же тип, что и изображение

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

...