tem que ser a IplImage.Isto pode nao ser desejado. Por exemplo, vou citar o caso que aconteceu comigo e tive que matar um pouco a cabeca para resolver.Muitas imagens que eu exibo (com o FOX Toolkit) precisam antes passar por algum processamento (com o OpenCV). Depois disso, eu nao preciso mais da IplImage, apenas dos pixels.Entretanto, seguir os passos explicados no outro topico levava a um problema seriissimo, que sera explicado no decorrer deste topico.Compartilhando pixels: antigamenteConforme eu havia explicado, criava-se primeiro a IplImage e depois a FXImage, utilizando o vetor de pixels, mais ou menos assim:IplImage *iplImage = cvCreateImage(cvSize(200, 200), IPL_DEPTH_8U, 4);FXImage *fxImage = new FXImage(getApp(), iplImage->imageData, IMAGE_KEEP|IMAGE_OWNED|IMAGE_SHMP|IMAGE_SHMI, iplImage->width, iplImage->height);Lembrando que era necessario um cast horroroso com reinterpret_cast para transformar os pixels da IplImage de char* para FXColor.Com isso, eu tenho que minha IplImage "doou" seus pixels para a FXImage, que tomou conta deles. Assim, a IplImage poderia ser dispensada (na verdade, somente o cabecalho da imagem; o OpenCV permite isso) que a FXImage, quando for liberada, libera tambem o vetor de pixels.O problemaIsso causa um problema que eu demorei muito para descobrir. E, depois de descoberto, ve-se que e uma coisa tao simples... e sempre um detalhezinho que cega a gente.O grande problema e que, como o vetor de pixels e alocado pela IplImage, ele e alocado usando malloc. A FXImage, quando tenta liberar, tenta com delete. Ai nao da certo...A "solucao"Eu criava as imagens independentemente, cada uma com seu vetor de pixels. Depois de processada, eu fazia uma chamada a memcpy para copiar os pixels. Uma tristeza considerando o contexto.Compartilhando pixels: a solucao de fatoDepois de quase desistir da ideia, eu descobri (dia desses...) o problema. E logo cheguei a uma solucao elegante (e obvia).Basta criar primeiro a FXImage, que vai apenas "emprestar" os pixels para a IplImage. Assim:FXImage *fxImage = new FXImage(getApp(), 0, IMAGE_KEEP|IMAGE_OWNED|IMAGE_SHMP|IMAGE_SHMI, 200, 200);Percebam que o segundo parametro, que seria o vetor de pixels, e nulo. Como os pixels sao de responsabilidade da FXImage, ela mesma os cria (isso e informado pela opcao IMAGE_OWNED).E necessario tambem manter os pixels no lado do cliente (opcao IMAGE_KEEP). Sem ela, os pixels sao liberados depois da imagem criada, impossibilitando o compartilhamento.Pois bem, agora vamos "emprestar" os pixels da FXImage para a IplImage:IplImage *iplImage = cvCreateImageHeader(cvSize(200, 200), IPL_DEPTH_8U, 4); cvSetData(iplImage, fxImage->getData(), CV_AUTOSTEP);cvCreateImageHeader() aloca todas as informacoes de uma imagem, com excecao do vetor de pixels. Com isso, a IplImage, que e temporaria, apenas pega emprestado os pixels para trabalhar sobre eles. Ao terminar o processamento, podemos liberar o cabecalho:cvReleaseImageHeader(&iplImage);Uma grande vantagem dessa abordagem e que nao precisa nem converter a imagem, conforme eu havia feito anteriormente. A imagem ja e criada no formato da FXImage.ConclusaoConforme havia dito, e uma coisa tao simples e obvia que fica invisivel.Espero que essa informacao seja util para quem for usar essas duas bibliotecas juntas.Abraco e ate a proxima.