基于Emgucv查找表的伪彩色处理 查找表报错? 5C

首先生成颜色查找表数组 colormap 数组类型是byte 大小256*3

Mat lut = new Mat( 1,256*3, 0, 3);
lut.SetTo(colormap);
byte[] Imagebigbyte = new byte[ImageWidth*DataNum_row];
Array.Copy(buffer,0,Imagebigbyte,0, ImageWidth*DataNum_row);
//buffer里面保存的时图像的像素值
Mat img = new Mat(ImageWidth, DataNum_row, 0, 1);

Mat Imagebig = new Mat(ImageWidth, DataNum_row * 3 , 0, 3);
Marshal.Copy(Imagebigbyte, 0, img.DataPointer, img.Height * img.Width);
CvInvoke.LUT(Imagebig, lut, Imagebig);
pictureBox2.Image = Imagebig.Bitmap;

在CvInvoke.LUT(Imagebig, lut, Imagebig)报错:

  • $exception {"OpenCV: (lutcn == cn || lutcn == 1) && _lut.total() == 256 && _lut.isContinuous() && (depth == CV_8U || depth == CV_8S)"} Emgu.CV.Util.CvException

求大神指教

2个回答

这个要看你的字节数组所构成的图片是否是合法的格式,长度宽度颜色位数调色板都有要求的,错了一点就报错

SetTo用来设置矩阵的值,你的数据总量是256*3,矩阵列数是256*3,你又写了3通道,相当于256*3*3个数据,所以应该是数据出现了问题。
你把定义Mat lut = new Mat( 1,256*3, 0, 3);改成Mat lut = new Mat( 1,256*3, 0, 1);试一下

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问