Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Identificar cores via câmera

Algum possibilidade de mostrar como ficou o código no android studio?

Abs 

El jueves, 3 de octubre de 2013, 13:58:53 (UTC-3), Carlos Pelegrin escribió:
O formato NV21 pega as cores no formato YCrCb (componentes b e r invertidos)

Sendo assim o código que funcionou foi esse:

private PreviewCallback p = new PreviewCallback() {

@Override
public void onPreviewFrame(byte[] data, Camera camera) {
int frameHeight = camera.getParameters().getPreviewSize().height;
int frameWidth  = camera.getParameters().getPreviewSize().width;

RGB(data,frameWidth,frameHeight);
}
};



E a função RGB: 


private void RGB( byte[] data, int imageWidth, int imageHeight){
int numPixels = imageWidth*imageHeight;
mCamera.setPreviewCallback(null);
mCamera.startPreview();
for (int y = 0; y < imageHeight; y++) {
   for (int x = 0; x < imageWidth; x++) {
       // Get the Y value, stored in the first block of data
       // The logical "AND 0xff" is needed to deal with the signed issue
       int Y = data[y*imageWidth + x] & 0xff;

       // Get U and V values, stored after Y values, one per 2x2 block
       // of pixels, interleaved. Prepare them as floats with correct range
       // ready for calculation later.
       int xby2 = x/2;
       int yby2 = y/2;
       float V = (float)(data[numPixels + 2*xby2 + yby2*imageWidth] & 0xff) - 128.0f;
       float U = (float)(data[numPixels + 2*xby2 + 1 + yby2*imageWidth] & 0xff) - 128.0f;
       // Do the YUV -> RGB conversion
       float Yf = 1.164f*((float)Y) - 16.0f;
       int R = (int)(Yf + 1.596f*V);
       int G = (int)(Yf - 0.813f*V - 0.391f*U);
       int B = (int)(Yf            + 2.018f*U);

       // Clip rgb values to 0-255
       R = R < 0 ? 0 : R > 255 ? 255 : R;
       G = G < 0 ? 0 : G > 255 ? 255 : G;
       B = B < 0 ? 0 : B > 255 ? 255 : B;
   }
}

A partir daí fiz umas continhas de menos Ex: r-g && r-b , para determinar a cor predominante em cada pixel, incrementei um contator e quem for maior é a cor RGB predominante na imagem. 

No meu caso basta! 


:)

Obrigado 


--
Carlos Eduardo Simões Pelegrin


Em 3 de outubro de 2013 08:58, Carlos Eduardo <carlosedua...@gmail.com> escreveu:
Ops, o software usa o ImageFormat.NV21 (default android). Eu que estava de "braço curto" aqui!

para setar o modo que eu quero de exposição a branco:

Camera.Parameters params = mCamera.getParameters(); params.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_FLUORESCENT);
mCamera.setParameters(params);

Agora está tudo encaminhado, falta apenas converter de hex para RGB.

após postarei o código!

Att.



--
Carlos Eduardo Simões Pelegrin


Em 3 de outubro de 2013 08:46, Carlos Eduardo <carlosedua...@gmail.com> escreveu:

Bom dia,

Eu estou justamente nesse ponto.

Consegui entender que aparentemente o método decodeYUV420SP do exemplo usa codificação inicial ImageFormat.YV12.
Parece também que ele converte a cor para ARGB (0xffa97fad) mas o alfa é sempre FF, sendo assim, eliminei esse alfa e tenho a cor em HEX;

Vou converter para rgb que é o que preciso.  


Encontrei um outro problema, agora com a câmera.

O método de cor e/ou exposição a luz, não sei qual, ou se os dois estão me atrapalhando.

A imagem da câmera fica amarela, atrapalhando na identificação da cor!

Estou pesquisando uma forma de setar o modo para fluorescente, que parece identificar melhor.

Um ponto que analisei no Color Grab é que ele parece controlar esses parâmetro para sempre deixar a câmera ajustada conforme a necessidade do software.

Isso é possível?

Obrigado.


--
Carlos Eduardo Simões Pelegrin


Em 2 de outubro de 2013 16:48, marcelo yonamine <yonam...@gmail.com> escreveu:

De algum modo (desculpe, mas não sei) vc deve converter os valores RGB para Color e mostrar as cores em uma listview
http://stackoverflow.com/questions/17761852/how-to-set-rgb-color-in-android


Em 2 de outubro de 2013 16:04, Carlos Eduardo <carlosedua...@gmail.com> escreveu:

Consegui começar a me achar no código,

Consegui implementar o ultimo exemplo  do link(pegar os frames), porém ainda não consegui identificar a cor.

Att.


--
Carlos Eduardo Simões Pelegrin


Em 2 de outubro de 2013 15:30, Carlos Eduardo <carlosedua...@gmail.com> escreveu:

Eu tentei incluir esse exemplo no meu código mas n rodou não,

Estou me perdendo em meio tantos extends e implements. 

Tem algum exemplo funcional?

O que entendi de câmera:

Tenho um objeto Camera e tenho que ter um preview (no meu caso é um framelayout que recebe um objeto de uma classe que extend SurfaceView e implements SurfaceHolder.Callback).

Aparentemente no preview eu conseguiria pegar o frame e identificar as cores conforme os pixels?

att.


--
Carlos Eduardo Simões Pelegrin


2013/10/2 marcelo yonamine <yonam...@gmail.com>


2013/10/2 Carlos Pelegrin <carlosedua...@gmail.com>
Boa tarde pessoal,

Pergunta "simples"  mas não sei por onde começar a procurar.

Como identificar cores pela câmera?

Criei um app que usa câmera usando o exemplo http://developer.android.com/guide/topics/media/camera.html e agora queria identificar cores de uma forma parecida com esse app: https://play.google.com/store/apps/details?id=com.loomatix.colorgrab

Alguma sugestão?

Obrigado

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.



--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário