OpenCV ( iniciando... )

Programação C em geral

Moderadores: 51, guest2003

OpenCV ( iniciando... )

Mensagempor andre_luis » 20 Jul 2011 08:12

Olá Pessoal,



Gostaria de saber se alguem já trabalhou com essa biblioteca, e qual compilador recomendaria ( tipo, aquele que deu menos problemas, tem mais exemplos na web, etc... ).

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor chipselect » 20 Jul 2011 19:31

na plataforma Windows, usei bastante o Visual Studio 2005 (licenciado), atualmente trabalho com o Visual Studio 2010 (express edition) usando o openCV 2.3 para projetos pequenos.

eu usei quase todas as versões do OpenCV, incluindo as versões 2.x. Trabalhei mais com a versão 1.1pré no Visual Studio 2005... que é basicamente C. Acho interessante as versões 2.2 e 2.3 porque já é mais C++.

não usei outros compiladores C/C++ no Windows com o openCV, só fiz um teste usando o MinGW e deu um pouco mais de trabalho pra configurar.

supondo que você está usando MS Windows, recomendo o VS2010 em 32 bits, mesmo que seu W7 seja 64. Compilando o openCV em 64 bits deu muito problema, tive que abrir os fontes do openCV e modificar umas diretivas, etc, isso no openCV 2.2 e depois do tempo perdido nem tentei na versão 2.3... resumindo, funcionou mas não valeu a pena.

As versões mais novas nem funcionam direito no RadStudio, dá muito trabalho pra compilar o source.

também usei o openCV dentro do C#, a produtividade aumenta bastante, mas limita um pouco o que você pode fazer com o openCV pois alguns recursos não estão disponíveis diretamente no "managed code". Obviamente você pode usar "unsafe code" a doidado e aproveitar 100% do openCV, só que daí acho melhor fazer em C/C++.

na plataforma Linux, o único que testei foi o Ubuntu 10 com gcc e openCV 2.1 em 64 bits, mas não usei pra nada comercial, só verifiquei se compilava e rodava uma janelinha tipo hello world. Apesar de existir outros compiladores, no Linux o mais usado é o gcc mesmo.

se você não quer usar c/c++, pode optar por .NET ou java. Existem wrappers para outras linguagens também, mas só conheço o emgu para o dot net.
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Mensagempor andre_luis » 20 Jul 2011 20:41

Rapaz,


Antes de mais nada, obrigado pelas dicas.
Não imaginava que o caminho das pedras seria tão difícil assim.

Bom, estou usando o VS 2008 com o OpenCV 2.3, mas inda não achei um exemplo de projeto que pudesse fazer a primeira compilação decente. Na verdade, eu gostaria de pegar um atalho e não ter de criar o projeto, mas trabalhar em cima de algum, pois nunca trabalhei com Visual Studio ( apenas C++Borland Builder ) e confesso que estou achando um pouco obscuro.

Bom, vou continuar catando informações, e conforme for, posto aqui....ou peço mais socorro....rsrs


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor andre_luis » 22 Jul 2011 22:38

Bom,


Consegui criar no Microsoft Visual Studio em C++ um projeto e executar um sample do OpenCV muito interessante, o find_obj.cpp.
O problema é que notei que, além de não haver recursos no VS para manipulação de objetos VCL tão poderosos como na Borland C++ Builder, o OpenCV acessa diretamente a interface gáfica pelo IPL, o que dificulta a interação com qualquer ambiente de compilação.

Por acaso, já vi outro programa no meu trabalho feito com essa biblioteca, e o painel da imagem também ficava separado do resto do programa.
É isso mesmo ?

OBS.: Pra imagem, não vejo tanto problema, já que o OpenCV pode salvar em disco e depois o compilador a abrir dentro de outro painel; mas no caso de filme, acho que vai ser um problema.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor chipselect » 23 Jul 2011 18:05

bom, se você não quer fazer as telas quase na unha usando Win32 e não quer criar as rotinas pra converter IPL Image para BMP em memória, então o mais fácil é usar o EMGU com C#, ou outras gambiarras da Microsoft, como CLR, MFC e etc...

Sugiro que baixe o emgu, e use c#, porque acho que é menos doloroso inicialmente... eu adoro c++, mas infelizmente demora muito fazer algo nele e nunca tentei usar c++ "ligado" no dot net, achei meio esquisito.

segue um trecho de código pra mostrar uma imagem da webcam (1 quadro) num Picturebox (igual ao do CBuilder...) usando o openCV através do emgu, é bem fácil e simples, removi toda a programação defensiva e thread, para simplificar.


No projeto em C# (Windows Application, obviamente), você bota uma image Box no form, exatamente igual ao modo que você fazia no CBuilder... mais baba que mamão com açúcar.

Código: Selecionar todos
Capture grabber = new Emgu.CV.Capture(0);
Image<Bgr, Byte> currentFrame=null;
while(currentFrame==null)
currentFrame = grabber.QueryFrame();
Byte[, ,] data;
data = currentFrame.Data;
imageBox1.Image = currentFrame;





Basicamente você cria um projeto com C#, inclui uma referência para a dll do EMGU, bota todas as dlls que vai usar do openCV no projeto e, nas propriedades de cada dll do openCV você coloca como copiar para saída, assim, quando gerar um executável no VS2010, ele vai automaticamente copiar as dlls de código nativo para junto com o executável, o instalador (publish) vai embutir isso automaticamente, não vai precisar ficar escrevendo script de make como fazemos direto usando gcc...

boa diversão
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Mensagempor chipselect » 23 Jul 2011 18:25

o image box é um componente do emgu... (editei porque tinha escrito picture box, e o C# já tem um picture box).

Caso você queira usar os componentes do dot net, usando c# você pode converter o Image<> para BMP com isso:

cpp code
public static BitmapSource ToBitmapSource(IImage image)
{
using (System.Drawing.Bitmap source = image.Bitmap)
{
IntPtr ptr = source.GetHbitmap(); //obtain the Hbitmap

BitmapSource bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
ptr,
IntPtr.Zero,
Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());

DeleteObject(ptr); //release the HBitmap
return bs;
}
}


é um código que achei na internet, não testei, mas lembro que era mais ou menos desse modo ai que eu usava para converter imagens em texturas para colocar no openGL.

Tem um projetinho interessante aqui em C#, só abrir e rodar, tudo tá ok, mas você altera fácil pra pegar imagem da webcam no lugar do mpeg:
http://dl.dropbox.com/u/1299007/HandGestureRecognition_Code_and_Video%20-%20Copia.rar
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Mensagempor andre_luis » 23 Jul 2011 18:25

Olá,

Mais uma vez, agradeço pelas informações.
Estou catando o EMGU na Web, mas por enquanto estou tentando fazer funcionar no QT, cujo ambiente até achei simpático, além da vantagem de ser multiplataforma.
Voce tem alguma opinião do QT em comparação com a solução que voce propôs ?
( gostaria de saber se vale a pena insistir nessa solução )

Obrigado.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor chipselect » 23 Jul 2011 18:33

bom, já que você vai pelo menos testar o EMGU, pode tentar rodar o dot net no Linux com o mono... e usar os componentes do C# (na verdade .net) mesmo... nunca tentei fazer isso, porque onde trabalho atualmente querem distância do Linux. Sei que o EMGU tem versão para Linux e Mac OS.

Não conheço ainda o QT, usei o GTK, fiz interfaces com GLADE e linkei tudo com o C/C++, achei um parto comparado com a solução do dot net ou do cbuilder. Se for realmente usar .NET, nem precisa esquentar muito sobre a interface, ele se vira com isso.
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Mensagempor andre_luis » 24 Jul 2011 12:40

Olha...


Nunca usei o C#, mas apenas o C++Borland Builder.
Acha que é muita encrenca se eu tentar ir por esse camino ?


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor chipselect » 25 Jul 2011 10:14

não é não, só é um pouco mais demorado pra fazer interface.

Se não for usar C#, nem precisa do EMGU, e se for usar o CBuilder mesmo, vai ter que usar uma versão antiga do openCV, tipo a 1.1pré.
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Mensagempor andre_luis » 25 Jul 2011 19:28

Ola,


Estou por um fio de fazer funcionar o QT, e acho que vou optar por esse mesmo.
Passei o final de semana acertando Includes, Variaveis de ambiente, configurações, versões, etc...
Já compilou e até gerou o .EXE na pasta Debug, mas tá dando erro numa DLL.

Conforme for, posto aqui os resultados, mas minha opinião até agora é positiva á ferramenta.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: OpenCV ( iniciando... )

Mensagempor andre_luis » 30 Jul 2011 09:10

Consegui fazer funcionar o OpenCV no QT.
Foi um verdadeiro parto, tendo de mexer em variáveis de ambiente do Windows, copiar DLLs, alterar caminho de includes, reinstalar versões, catar informações na Web, etc...

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor chipselect » 09 Ago 2011 12:24

André

Você está usando o OpenCV para reconhecimento de padrões/visão computacional?
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50

Mensagempor andre_luis » 09 Ago 2011 20:35

chipselect escreveu:André

Você está usando o OpenCV para reconhecimento de padrões/visão computacional?


Sim,

Por enquanto estamos na fase de aprimoramento da qualidade da imagem ( enhancement ), e só depois disso decidimos que abordagem ( ou seja, que algorítimo ) adotar em função das características finais.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ


Voltar para Visual C++/C/C++/C#

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x