Обнаружение черных / серых элементов в OpenCV - PullRequest
0 голосов
/ 17 февраля 2012

Вы, ребята, знаете, как обнаружить / вернуть точки всех черных / сероватых элементов на изображении?Если возможно, пожалуйста, включите любые обучающие коды для меня.

Редактировать: я сделал пороговое изображение из источника "img".и я пытаюсь сделать все цветные пиксели белыми.

for(x=0; x<img->width; x++) {
  for(y=0;y<img->height; y++) {
    uchar* temp_ptr = &((uchar*)(img_result_threshold->imageData + img_result_threshold->widthStep*y))[x];
    s = cvGet2D(img_hsv, y, x);
    if(s.val[1] >= 100 && s.val[2] >= 100) {
      temp_ptr[0]=255; //White to greater of threshold
      printf("Point(%d, %d) = (%.1f, %.1f, %.1f)\n", x, y, s.val[0], s.val[1], s.val[2]);
    } else {
      temp_ptr[0]=0; //Black other
    }
  }
}

Ответы [ 2 ]

2 голосов
/ 17 февраля 2012

Предполагая, что входное изображение имеет 24-битный формат, то есть RGB, тогда пиксель будет в оттенках серого, если все три значения (RG и B) одинаковы.Элементы G и B имеют одинаковое значение, и если они не установят пиксель в белый цвет.

После этого у вас останется изображение только с пикселями в оттенках серого.

Если вы хотите использовать только темно-серые пиксели, тогда, когда вы проверяете, совпадают ли значения RGB, вы можете сделать вторую проверку, чтобы узнать, меньше ли значение, скажем, 127 (или любое другое значение порога длябыть).

0 голосов
/ 17 февраля 2012
  1. Сначала преобразуйте цветное изображение в серое изображение, если ваше изображение имеет формат RGB

    cvtColor (im_rgb, im_gray, CV_RGB2GRAY);

  2. Преобразование изображения в двоичное с использованием вашего порога, скажем, 127

    cvThreshold (im_gray, im_bw, 127, 255, CV_THRESH_BINARY);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...