- Hobject IplImageToHImage(IplImage *pImage)
- {
- Hobject Hobj;
- if (3 == pImage->nChannels)
- {
- IplImage *pImageRed,*pImageGreen,*pImageBlue;
- pImageRed = cvCreateImage(cvGetSize(pImage),IPL_DEPTH_8U,1);
- pImageGreen = cvCreateImage(cvGetSize(pImage),IPL_DEPTH_8U,1);
- pImageBlue = cvCreateImage(cvGetSize(pImage),IPL_DEPTH_8U,1);
- cvSplit(pImage,pImageBlue,pImageGreen,pImageRed,NULL);
- uchar *dataRed = new uchar[pImage->width*pImage->height];
- uchar *dataGreen = new uchar[pImage->width*pImage->height];;
- uchar *dataBlue = new uchar[pImage->width*pImage->height];;
- int height = pImage->height;
- int width =pImage->width;
- for(int i = 0; i<height; i++)
- {
- memcpy(dataRed + width*i,pImageRed->imageData + pImageRed->widthStep*i, width);
- memcpy(dataGreen + width*i,pImageGreen->imageData + pImageGreen->widthStep*i, width);
- memcpy(dataBlue + width*i,pImageBlue->imageData + pImageBlue->widthStep*i, width);
- }
- gen_image3(&Hobj,"byte",pImage->width,pImage->height,(Hlong)(dataRed),(Hlong)(dataGreen),(Hlong)(dataBlue));
- cvReleaseImage(&pImageRed);
- cvReleaseImage(&pImageGreen);
- cvReleaseImage(&pImageBlue);
- delete[] dataRed;
- delete[] dataGreen;
- delete[] dataBlue;
- }
- if (1 == pImage->nChannels)
- {
- int height = pImage->height;
- int width =pImage->width;
- uchar *dataGray = new uchar[width*height];
- for(int i = 0; i<height; i++)
- {
- memcpy(dataGray + width*i,pImage->imageData + pImage->widthStep*i, width);
- }
- gen_image1(&Hobj,"byte",pImage->width,pImage->height,(Hlong)(dataGray));
- delete[] dataGray;
- }
- return Hobj;
- }
- IplImage* HImageToIplImage(Hobject &Hobj)
- {
- IplImage *pImage;
- HTuple htChannels;
- char cType[MAX_STRING];
- Hlong width,height;
- width = height =0;
- //转换图像格式
- convert_image_type(Hobj,&Hobj,"byte");
- count_channels(Hobj,&htChannels);
- if (htChannels[0].I() == 1)
- {
- unsigned char *ptr;
- get_image_pointer1(Hobj,(Hlong *)&ptr,cType,&width,&height);
- pImage = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
- for(int i = 0; i<height; i++)
- {
- memcpy(pImage->imageData+ pImage->widthStep*i, ptr + width*i, width);
- }
- }
- if (htChannels[0].I() == 3)
- {
- unsigned char *ptrRed,*ptrGreen,*ptrBlue;
- ptrRed = ptrGreen =ptrBlue = NULL;
- get_image_pointer3(Hobj,(Hlong *)&ptrRed,(Hlong *)&ptrGreen,(Hlong *)&ptrBlue,cType,&width,&height);
- IplImage *pImageRed,*pImageGreen,*pImageBlue;
- pImage = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,3);
- pImageRed = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
- pImageGreen = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
- pImageBlue = cvCreateImage(cvSize(width,height),IPL_DEPTH_8U,1);
- for(int i = 0; i<height; i++)
- {
- memcpy(pImageRed->imageData+ pImageRed->widthStep*i, ptrRed + width*i, width);
- memcpy(pImageGreen->imageData+ pImageGreen->widthStep*i, ptrGreen + width*i, width);
- memcpy(pImageBlue->imageData+ pImageBlue->widthStep*i, ptrBlue + width*i, width);
- }
- cvMerge(pImageBlue,pImageGreen,pImageRed,NULL,pImage);
- cvReleaseImage(&pImageRed);
- cvReleaseImage(&pImageGreen);
- cvReleaseImage(&pImageBlue);
- }
- return pImage;
- }