python — порог для ученика (отслеживание глаз) — OpenCV с переполнением стека

Я только начал работать над отслеживанием учеников. Я сделал порог для ученика, но все же не так точно, как нужно. Ниже мое текущее пороговое изображение

Текущее пороговое изображение

IMG

Я бы хотел видеть в контуре только зрачка, но, к сожалению, вижу и другие шумы. Ниже мой код

int main( int argc, char** argv )
{
Mat src, src_gray, src_bw_glint, src_bw_iris, dst, dsti;
int threshold_value1 = 130;
int threshold_value2 = 30;
int const max_BINARY_value = 255;
VideoCapture cap(1); // open the default camera
if(!cap.isOpened())  // check if we succeeded
return -1;
Mat frame;
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;

int p = 0;

for(;;)
{

cap >> src; // get a new frame from camera

/// Convert it to gray
cvtColor( src, src_gray, CV_BGR2GRAY );

Mat drawing = Mat::zeros( src_gray.size(), CV_8UC3 );

/// Reduce the noise so we avoid false circle detection
GaussianBlur( src_gray, src_gray, Size(9, 9), 2, 2 );
namedWindow( " Demo_Gray", CV_WINDOW_AUTOSIZE );
imshow( " Demo_Gray", src_gray );

//Threshold
threshold( src_gray, src_bw_iris, threshold_value2, max_BINARY_value, 1);

int morph_size = 5;
Mat element = getStructuringElement( MORPH_ELLIPSE, Size( 2*morph_size + 1, 2*morph_size+1 ), Point( morph_size,morph_size ) );
cout<<element;

morphologyEx( src_bw_iris, dst, MORPH_DILATE, element,Point(-1,-1), 1);
//imshow("Open Image", dst);
morphologyEx( dst, dsti, MORPH_TOPHAT, element,Point(-1,-1), 10 );
//imshow("TopHAt Image", dsti);
morphologyEx( dsti, dsti, MORPH_DILATE, element,Point(-1,-1), 1);
imshow("TopHAt Image", dsti);

findContours( dsti, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );

for( int i = 0; i< contours.size(); i++ )
{
//Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255));
Scalar color = Scalar(p, 255, p);

drawContours( drawing, contours,i, color, 2, 8, hierarchy, 0, Point() );
// circle( drawing, mc[i], 4, color1, -1, 8, 0 );
imshow("Drawing", drawing);
}

if (waitKey(1) == 'q') {
break;
}

}
return 0;
}

Мне нравится знать лучший подход к работе с порогом, чтобы отслеживать только ученика. Также, пожалуйста, дайте мне знать, если вы думаете, это может быть сделано намного проще, чем то, что я сделал.

0

Решение

Я не думаю, что работа с порогом улучшит ваш результат.

Вот что я бы сделал:

  1. На ваш двоичный результат примените отверстие с большим круговым структурирующим элементом. Все маленькие шаблоны будут стерты, останется только большая (более или менее) круговая.
  2. Извлечь индексы формы, в основном индексы округлости (см. список здесь).
  3. Более круглым рисунком будет зрачок.
0

Другие решения

Я рекомендую предварительную обработку с медианным фильтром

Ваше изображение без фильтра:

ваше изображение

и ваше изображение обработано медианным фильтром:

ваше изображение обработано медианным фильтром

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector