d1g1t 0 Жалоба Опубликовано November 22, 2010 Всем привет После применения cvThreshold и очистки, вот такой результат (сохранил в формате bmp): cvThreshold(limbusImg, threshold_image, 130, 200, CV_THRESH_BINARY); Проблема состоит в том, что в img->imageData есть данные которые не соответствуют данным на рисунке. for(int j=0; j<height; j++) { for(int i=0; i<width; i++) { int pixel_value = image[(int)(j)*width+(int)(i)]; log("pixel(%d,%d):%d", i, j, pixel_value); } // Белые писксели pixel(114,62):200 pixel(115,62):200 pixel(116,62):200 pixel(117,62):200 pixel(118,62):200 pixel(119,62):200 pixel(120,62):200 pixel(121,62):200 pixel(122,62):255 pixel(123,62):255 pixel(124,62):200 На рисунке (красний маркер) таких пикселей нету. Подскажите где собака зарыта. Спасибо. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано November 22, 2010 Выложи картинку как bmp, сейчас - jpg. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
d1g1t 0 Жалоба Опубликовано November 22, 2010 Выложи картинку как bmp, сейчас - jpg. threshold_image.bmp Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано November 22, 2010 threshold_image.bmp Не там пиксели берете , где Вам кажется. У Вас при расчете адреса байта не учитывается выравнивание, надо брать не width, а widthStep это размер строки изображения в байтах, он может, и часто не соответствует ширине изображения. В документации на IplImage написано так: "param widthStep: The size of an aligned image row, in bytes" Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
d1g1t 0 Жалоба Опубликовано November 22, 2010 Не там пиксели берете , где Вам кажется. У Вас при расчете адреса байта не учитывается выравнивание, надо брать не width, а widthStep это размер строки изображения в байтах, он может, и часто не соответствует ширине изображения. В документации на IplImage написано так: "param widthStep: The size of an aligned image row, in bytes" Переделал: pixel_value1 = ((uchar*)(image->imageData + image->widthStep*y))[x]; Теперь все отлично работает. Огромное спасибо. Странно конечно. Изображение 8-битное. 1 пиксель - 1 байт. В 2й раз учту етот фактор... Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах