OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
AtpOpenCV.cpp
Go to the documentation of this file.
1 //**************************************************************************************************
2 //
3 // OSSIM Open Source Geospatial Data Processing Library
4 // See top level LICENSE.txt file for license information
5 //
6 //**************************************************************************************************
8 #include "AtpOpenCV.h"
9 #include "../AtpCommon.h"
10 
11 using namespace cv;
12 
13 namespace ATP
14 {
15 #if 1
16  #define IPL_PIXEL_DEPTH IPL_DEPTH_8U
17  #define PIXEL_TYPE ossim_uint8
18  #define NUM_BYTES_PER_PIXEL 1
19 #else
20  #define IPL_PIXEL_DEPTH IPL_DEPTH_16U
21  #define PIXEL_TYPE ossim_uint16
22  #define NUM_BYTES_PER_PIXEL 2
23 #endif
24 
25 IplImage *convertToIpl(const ossimImageData* data)
26 {
27  IplImage *ret=NULL;
28  int numbytes;
29 
30  if(data==NULL)
31  {
32  CWARN<<"convertToIpl::Invalid data ptr."<<endl;;
33  return ret;
34  }
35 
36  //const unsigned char *dataptr = data->getUcharBuf();
37  const PIXEL_TYPE *dataptr = (PIXEL_TYPE*) data->getBuf();
38  if (!dataptr)
39  {
40  CFATAL<<"convertToIpl::ERROR getting the image data! bands/depth not supported"<<endl;
41  return ret;
42  }
43 
44  unsigned int numBands = data->getNumberOfBands();
45  numbytes = NUM_BYTES_PER_PIXEL;
46  if(numBands==1)
47  {
48  //numbytes=1;
49  //numbytes=2;
50  }
51  else
52  {
53  // TODO COLOR IMAGES DON"T WORK RIGHT NOW
54  numbytes=3;
55  // Going to use the function (CvtPlaneToPix(IplImage*src0,src1,src2,src3,dst))
56  CFATAL<<"convertToIpl -- ERROR: multiband feature detection not implemented yet!"<<endl;
57  return ret;
58  }
59 
60  ret = cvCreateImage(cvSize(data->getWidth(), data->getHeight()),IPL_PIXEL_DEPTH, (int)numBands);
61  if(ret)
62  {
63  // <COPY IMAGE INTO IPLIMAGE STRUCTURE IN ALIGNED FORMAT>
64  int lines=data->getHeight();
65  for(int y=0;y<lines;y++)
66  {
67  memcpy(&ret->imageData[y*ret->widthStep],&dataptr[y*ret->width],ret->width*numbytes);
68  }
69  }
70  else
71  {
72  CFATAL<<"convertToIpl::ERROR creating IplImage."<<endl;
73  }
74  return ret;
75 }
76 
77 IplImage *convertToIpl32(const ossimImageData* data)
78 {
79  IplImage *indata,*ret32bit;
80  CvSize dim;
81  indata=convertToIpl(data);
82  dim.height=indata->height;
83  dim.width=indata->width;
84  ret32bit=cvCreateImage(dim,IPL_DEPTH_32F,indata->nChannels);
85  cvConvert(indata,ret32bit);
86  cvReleaseImage(&indata);
87  return ret32bit;
88 }
89 
90 void copyIpl32ToOid(IplImage* ipl, ossimImageData* oid)
91 {
92  //IplImage *tmp8bit;
93  IplImage *indata;
94  CvSize dim;
95  dim.height=ipl->height;
96  dim.width=ipl->width;
97  indata=cvCreateImage(dim,IPL_PIXEL_DEPTH,ipl->nChannels);
98  cvConvert(ipl,indata);
99  copyIplToOid(indata, oid);
100 }
101 
102 void copyIplToOid(IplImage* ipl, ossimImageData* oid)
103 {
104  const PIXEL_TYPE *iplptr = (const PIXEL_TYPE*) ipl->imageData;
105  PIXEL_TYPE* oidptr = (PIXEL_TYPE*)oid->getBuf();
106  int numbytes = NUM_BYTES_PER_PIXEL; // num bytes per sample
107  for(unsigned int y=0;y<oid->getHeight();y++)
108  {
109  memcpy(&(oidptr[y*oid->getWidth()]),&iplptr[y*ipl->widthStep],oid->getWidth()*numbytes);
110  }
111 }
112 }
virtual ossim_uint32 getWidth() const
virtual ossim_uint32 getNumberOfBands() const
IplImage * convertToIpl32(const ossimImageData *data)
Definition: AtpOpenCV.cpp:77
ossim_uint32 y
#define IPL_PIXEL_DEPTH
Definition: AtpOpenCV.cpp:16
virtual ossim_uint32 getHeight() const
void copyIpl32ToOid(IplImage *ipl, ossimImageData *oid)
Definition: AtpOpenCV.cpp:90
#define PIXEL_TYPE
Definition: AtpOpenCV.cpp:17
void copyIplToOid(IplImage *ipl, ossimImageData *oid)
Converts an IPL image to an ossimImageData object:
Definition: AtpOpenCV.cpp:102
#define NUM_BYTES_PER_PIXEL
Definition: AtpOpenCV.cpp:18
THESE FUNCTIONS REQUIRE OPENCV.
IplImage * convertToIpl(const ossimImageData *data)
Converts an ossimImageData pointer to an IplImage for use in OpenCV.
Definition: AtpOpenCV.cpp:25
virtual const void * getBuf() const
#define CFATAL
#define CWARN