Jump to content
ricamerica1987

7 erros inesperados e nao sei corrigir utilizando open cv ajuda por favor

Recommended Posts

ricamerica1987

junto envio o codigo feito para se detectar o erro no BYTE que nao entendo, se me ajudarem agradeço;

codigo:

// TP2_PAIB.cpp : Defines the entry point for the console application.
//trabalho elaborado por ricardo Gonçalves nº 2693
// Intituto Politecnico do Cávado e do Ave
//Escola Superior de Tecnologia
//Disciplina: Processamento e Análise de Imagem Biomédica
//Docente: José Brito
//Elaborado: Barcelos, 09 de Janeiro de 2011

#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>


IplImage *imagem1; //Criar um apontador para Imagem 1 (referencia)
IplImage *imagem2; //Criar um apontador para Imagem 2 (alvo)
IplImage *imagem3; //Criar um apontador para Imagem 3 (final)
IplImage *imagem4; //Criar imagem MRI a partir da selecção rato
IplImage *imagem5; //Criar imagem PET a partir da selecção rato

CV_EXTERN_C_FUNCPTR( void (*CvMouseCallback )(int event, int x, int y, int flags, void* param) );
                                            

//Declarar Variaveis

int b1,b2,b3,g1,g2,g3,r1,r2,r3 = 0;
int iab, iac;
int ia, ib, ic;
int ma, mb, mc, md;
int na, nb, nc, nd;
int peso;
float x2;
float y2;
int xiMRI=0, yiMRI=0, xfMRI=0, yfMRI=0;
int xiPET=0, yiPET=0, xfPET=0, yfPET=0;




//Criação do Round
float round(float in)
{
float cima, baixo;
cima=ceilf(in);
baixo=floor(in);
if ((in-baixo)<(cima-in))
	return baixo;
else return cima;
}


void clika_ratoMRI ( int event, int x, int y, int flags, void* param )
{
switch( event )
    {
    case CV_EVENT_LBUTTONDOWN:
	{
		xiMRI=x;
		yiMRI=y;
	}

case CV_EVENT_LBUTTONUP:
	{
		xfMRI=x;
		yfMRI=y;
	}
}




}


void clika_ratoPET ( int event, int x, int y, int flags, void* param )
{
switch( event )
    {
    case CV_EVENT_LBUTTONDOWN:
	{
		xiPET=x;
		yiPET=y;
	}

case CV_EVENT_LBUTTONUP:
	{
		xfPET=x;
		yfPET=y;
	}
}




}

void selectMRI()
{
if (imagem4!=0)
	cvReleaseImage(&imagem4);

int compMRI = xfMRI-xiMRI;
int altMRI = yfMRI-yiMRI;
imagem4=cvCreateImage(cvSize((xfMRI-xiMRI),(yfMRI-yiMRI)), imagem1->depth, imagem1->nChannels);

for (int linha=yiMRI; linha<yfMRI;linha++)
{
	for (int coluna=xiMRI; coluna<xfMRI; coluna++)
	{
		for (int canal=0; canal<imagem1->nChannels;canal++)
		{
			int ponto = (BYTE)imagem1->imageData[linha*imagem1->widthStep + coluna*imagem1->nChannels+canal];
			imagem4->imageData[(linha-yiMRI)*imagem4->widthStep+(coluna-xiMRI)*imagem4->nChannels+canal]=ponto;
		}

	}

}




}

void processa(int i)
{
//Percorrer Pixel da imagem final e colocar lá um pixel com a média dos pixeis das imagens 1 e 2
	for (int y1 = 0; y1 < imagem3->height ; y1++)
	for (int x1 = 0; x1 < imagem3->width ; x1++)
	{			

			x2=(x1/(imagem1->width-1.0))*(imagem2->width-1.0);
			y2=(y1/(imagem1->height-1.0))*(imagem2->height-1.0);


			ma=(int)x2;
			mb=ma+1;
			mc=(int)x2;
			md=mc+1;
			na=(int)y2;
			nb=na;
			nc=na+1;
			nd=nc;


			float dab=x2-ma;
			float dba=1-dab;
			float dcd=x2-ma;
			float ddc=1-dcd;
			float dac=y2-na;
			float dca=1-dac;
			float dbd=y2-nb;
			float ddb=1-dbd;


			for (int canal=0;canal<imagem3->nChannels;canal ++)
			{
				float icd=((BYTE)(imagem2->imageData[nc*imagem2->widthStep+mc*imagem2->nChannels + canal])*ddc+((BYTE)(imagem2->imageData[nd*imagem2->widthStep+md*imagem2->nChannels + canal]))*dcd);
				float iab=((BYTE)(imagem2->imageData[na*imagem2->widthStep+ma*imagem2->nChannels + canal])*dba+((BYTE)(imagem2->imageData[nb*imagem2->widthStep+mb*imagem2->nChannels + canal]))*dab);

				int i1=(BYTE)(imagem1->imageData[y1*imagem1->widthStep+x1*imagem1->nChannels+canal]);
				int i2=(int)(iab*dca+icd*dac);
				int i3=((peso/100.0)*i1) + (1-(peso/100.0))*i2;
				imagem3->imageData[y1*imagem3->widthStep+x1*imagem3->nChannels+canal] = (int)i3;
			}
			cvShowImage("Fusao", imagem3);




	}


}


int main(int argc, char* argv[])
{
	imagem1=cvLoadImage("MRI015.png", CV_LOAD_IMAGE_COLOR); //Carregar o MRI para Imagem 1 em RGB
	imagem2=cvLoadImage("PET015.png", CV_LOAD_IMAGE_COLOR); //Carregar o PET para Imagem 2 em RGB

//Criar uma imagem com as mesmas caracteristicas que a Imagem 1 (mesma dimensao,profundidade de cor, num.canais)
imagem3=cvCreateImage(cvSize(imagem1->width,imagem1->height), imagem1->depth, imagem1->nChannels);

// Parte Final, mostrar e destruir imagens
cvNamedWindow("MRI", 1);
cvNamedWindow("PET", 1);
cvNamedWindow("Fusao", 1);
peso=50;
cvCreateTrackbar("Peso","Fusao",&peso,100,processa);


processa(0);

cvShowImage("MRI", imagem1);
cvShowImage("PET", imagem2);

cvSetMouseCallback("MRI", clika_ratoMRI, 0);
cvSetMouseCallback("PET", clika_ratoPET, 0);

if((xiMRI!=0)&&(xfMRI!=0)&&(yfMRI!=0))
{
	selectMRI();
	cvNamedWindow("MRI2", 1);
	cvShowImage("MRI2", imagem4);
}














cvWaitKey(0);

cvDestroyWindow("MRI");
cvDestroyWindow("PET");
cvDestroyWindow("Fusao");


cvReleaseImage(&imagem1);
cvReleaseImage(&imagem2);
cvReleaseImage(&imagem3);

return 0;
}

Share this post


Link to post
Share on other sites
ricamerica1987

se alguem me puder ajudar agradeço este programa funciona na base do opencv, imagens biomedicas

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.