I'm using Cluebat-man's LabVIEW-C++ array interoperability class, and I'm getting an error extracting the data from from the array. Or, rather, the data extraction appears to succeed, but build fails when I try to use the data a line later.
(Context: The program is designed to implement Manjunath et al's peer-group filtering; the function is designed to extract the hue plane of an image. I'm fairly certain it's not a problem with the specific function, aside from perhaps its declaration of parameters, because the same problem crops up later in the program when I try to use the results from getHuePlane()
)
#ifndef IO_TYPE //Normal arrays or LabVIEW?
#define I_TYPE /* int* */ CLvArrayHandlePtr<unsigned __int32, 2>
#define O_TYPE /* int* */ CLvArrayHandlePtr<unsigned __int8, 2>
#define IO_TYPE
#endif
#ifndef USING_LABVIEW_DEFINED
#define USING_LABVIEW //remove if not
#define USING_LABVIEW_DEFINED
#endif
Extraction and function call:
#include "LvArrayIndexer.h"
#include "LvArrayTemplate.h"
O_TYPE pgf(I_TYPE HSLimage, int width, int height, int halfWindowSize, int noiseThreshold) {
#ifdef USING_LABVIEW
size_t size[2] = {width, height};
HSLimage.Resize(size);
CLvArrayIndexer<unsigned __int32, 2 > baseImgIndexer(HSLimage);
CLvArrayHandlePtr<unsigned __int8, 2 > hueImage;
hueImage.Resize(size);
CLvArrayIndexer<unsigned __int8, 2 > hueImgIndexer(hueImage);
int LvImageData[width][height];
#else
int hueImage[width][height];
#endif
int hueImageData[width][height];
int windowSize = 2 * halfWindowSize - 1;
int windowLength = windowSize * windowSize;
int window[windowSize][windowSize];
int flattenedWindow[windowLength];
vector<int> peerGroup;
int currentValue;
#ifdef USING_LABVIEW
for (int x = 0; x < width; x++)
for (int y = 0; y < height; y++)
LvImageData[x][y] = baseImgIndexer[x][y];
hueImageData = getHuePlane(LvImageData, width, height);
#else
hueImageData = getHuePlane(HSLimage, width, height);
#endif
//Function continues
}
Function definition:
int* getHuePlane(int* HSLimage, int width, int height) {
int hueImage[width][height];
double calcValue;
/*Get hue plane
*AL HU SA LU ->AL HU.SA LU -> AL HUF
*AL HU -> AL.HU -> 0.HU -> HU
*/
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
calcValue = int(double(HSLimage[x][y]) / 65536); //A-H-S-L; removes S-L
calcValue = (calcValue / 256) - int(calcValue / 256);
calcValue = calcValue * 256;
hueImage[x][y] = int(calcValue);
}
}
return hueImage;
}
The error is:
pgf.cpp:88:58: error: cannot convert 'int (*)[(((unsigned int)(((int)height) + -0x000000001)) + 1)]' to 'int*' for argument '1' to 'int* getHuePlane(int*, int, int)'
System information:
I'm guessing the error is on this line:
hueImageData = getHuePlane(LvImageData, width, height);
The reason is because of type missmatch: LvImageData
is defined as int [][]
while getHuePlane
expects int *
.
Also, you should also get an error on this line (in getHuePlane
):
calcValue = int(double(HSLimage[x][y]) / 65536); //A-H-S-L; removes S-L
This is because HSLimage
in the function is an int *
while you try to access it as int [][]
(or int *[]
as the argument type should really be).