C# Find the closest centroid -


i have code it's not because add centroid the list(todos_centroides) , after find squares calculate 1 closest. it's causing delay on image processing.

does have better idea?

public void quadrado()     {           frame_drone_copia = frame_drone.copy(); //copia imagem original para evitar pixeis escritos na imagem          tamanho_imagem.x = frame_drone.width;         tamanho_imagem.y = frame_drone.height;          //frame_drone = frame_drone.smoothbilatral(9,0,)         frame_drone = frame_drone.smoothblur(11,11);         frame_drone = frame_drone.pyrdown().pyrup();           cvinvoke.cvcvtcolor(frame_drone, frame_drone_gray, color_conversion.bgr2gray);          //cvinvoke.cvcvtcolor(frame_drone, frame_drone_hsv, color_conversion.bgr2hsv); //converte imagem da camera rgb para hsv         frame_drone_hsv = frame_drone.convert< hsv, byte >();           //frame_drone_threshold_hsv = frame_drone_hsv.inrange(new hsv(0,110,0), new hsv(255,255,255)); //utiliza trackbars hsv para ver cor pretendida           frame_drone_threshold_hsv = frame_drone_hsv.inrange(new hsv(arena.valor_hl.value, arena.valor_sl.value, arena.valor_vl.value), new hsv(arena.valor_hh.value, arena.valor_sh.value, arena.valor_vh.value)); //utiliza trackbars hsv para ver cor pretendida          //frame_drone_amarelo= frame_drone_hsv.inrange(new hsv(arena.valor_hl.value, arena.valor_sl.value, arena.valor_vl.value), new hsv(arena.valor_hh.value, arena.valor_sh.value, arena.valor_vh.value)); //utiliza trackbars hsv para ver cor pretendida          frame_drone_amarelo = frame_drone_hsv.inrange(new hsv(6, 28, 75), new hsv(66, 160, 255));                    cvinvoke.cvor(frame_drone_threshold_hsv, frame_drone_amarelo, frame_drone_threshold_hsv, new intptr());           frame_drone_threshold_hsv = frame_drone_threshold_hsv.dilate(4);         frame_drone_threshold_hsv = frame_drone_threshold_hsv.erode(1);           frame_drone_canny = frame_drone_threshold_hsv.canny(160, 80);         frame_drone_canny = frame_drone_canny.smoothgaussian(9);           using (memstorage storage = new memstorage()) //aloca espaço na memoria         {              //procura contornos              (contour<system.drawing.point> contours = frame_drone_canny.findcontours(emgu.cv.cvenum.chain_approx_method.cv_chain_approx_simple, emgu.cv.cvenum.retr_type.cv_retr_tree, storage); contours != null; contours = contours.hnext)             {                  contour<system.drawing.point> currentcontour = contours.approxpoly(contours.perimeter * 0.05, storage); //aproxcontour                                          if (currentcontour.area > 3300/*currentcontour.area >= area_contornos_min.value && currentcontour.area <= area_contornos_max.value*/) //se area estiver dentro dos valores das trackbars                 {                      if (currentcontour.total == 4) //se retangulo/quadrado                     {                          retangular = true;                          pontos = currentcontour.toarray(); //pontos para array                         linesegment2d[] edges = pointcollection.polyline(pontos, true);                          (int = 0; < edges.length; i++)                         {                             double angulo = math.abs(edges[(i + 1) % edges.length].getexteriorangledegree(edges[i]));                              if (angulo < 75 || angulo > 105) //limitação angulo para determinar se é quadrado ou nao                             {                                 retangular = false; //não é quadrado                                 centroid = new point(0, 0);                                 posicao_atual = new pointf(0, 0);                              }                         }                          if (retangular)                         {                             frame_drone_copia.draw(currentcontour, new bgr(color.orange), 6); //desenha o contorno quadrado                                    frame_drone_copia.draw(new circlef(new system.drawing.pointf(centroid.x, centroid.y), 1), new bgr(color.red), 5);                             centroid.x = (int)currentcontour.getmoments().gravitycenter.x;                             centroid.y = (int)currentcontour.getmoments().gravitycenter.y;                              todos_centroides.add(new pointf(centroid.x, centroid.y));                                (int j = 0; j < pontos.length; j++)                             {                                 if (centroid.x - pontos[j].x > 0 && centroid.y - pontos[j].y > 0)                                 {                                     pontos_quadrado[0] = new point(pontos[j].x, pontos[j].y);                                 }                                 else if (centroid.x - pontos[j].x > 0 && centroid.y - pontos[j].y < 0)                                 {                                     pontos_quadrado[1] = new point(pontos[j].x, pontos[j].y);                                 }                                 else if (centroid.x - pontos[j].x < 0 && centroid.y - pontos[j].y > 0)                                 {                                     pontos_quadrado[2] = new point(pontos[j].x, pontos[j].y);                                 }                                 else if (centroid.x - pontos[j].x < 0 && centroid.y - pontos[j].y < 0)                                 {                                     pontos_quadrado[3] = new point(pontos[j].x, pontos[j].y);                                 }                             }                          }                                     }                 }              }         }          //verificar qual o centroid mais proximo centro da imagem.         mais_proximo = todos_centroides.orderby(x => math.pow(x.x - tamanho_imagem.x / 2, 2) + math.pow(x.y - tamanho_imagem.y / 2, 2)).firstordefault(); //verifica qual o ponto mais proximo centro da imagem         todos_centroides.clear();         if (mais_proximo != new pointf(0, 0))         {             calculo_cor(mais_proximo);          }     } 


Comments

Popular posts from this blog

python - How to insert QWidgets in the middle of a Layout? -

python - serve multiple gunicorn django instances under nginx ubuntu -

module - Prestashop displayPaymentReturn hook url -