openCV查找表16CU1

时间:2016-01-29 08:39:19

标签: c++ opencv lookup-tables

我需要将Mat 8UC1 [0,255]的值替换为cv :: Mat lookUpTable(1,256,CV_16UC1)的值;我检查这个OpenCV tutorial是一种解释,这是最快的方法,但是,当我在每个位置检查LUT的指定值时,我只能读取8位,因此我会丢失其他8位。这是源代码:

  unsigned short int zDTableHexa[256]={0};
  .... get the values...
  cv::Mat lookUpTable(1, 256, CV_16UC1);
  uchar* p = lookUpTable.data;
  for( int i = 0; i < 256; i++){
      p[i] = zDTableHexa[i];
      cout<<(int)p[i]<<":"<<zDTableHexa[i]<<sizeof(p[i])<<":"<<sizeof(zDTableHexa[i])<<endl;
  }

打印结果如下:

  

104:872个
  101:869个
  97:865个
  93:861个
  90:858个
  86:854个
  83:851个
  80:848个
  76:844个
  73:841个
  70:838个
  66:834个
  63:831

当我签入二进制文件时,只有前8位。 我知道指针是UCHAR(8位),但我如何分配完整的值?

2 个答案:

答案 0 :(得分:1)

unsigned short* p = (unsigned short*) lookUpTable.data;

答案 1 :(得分:0)

OpenCV LUT正在使用CV_8U,所以你可以做的是将数字分成3,即3x CV_8U或CV_8UC3。但是LUT中不能有超过256个元素,而不是0..255之外的其他值作为索引。

换句话说,您可以将uchar解析为uchar s或将uchar s解析为float s:CV_8UC1 - &gt; CV_8UC1或CV_8UC1 - &gt; CV_8UC3(我没有尝试过CV_8UC4,它可以工作)。

要获取CV_8UC3的元素,请选中cv::Vec3b

我找到了this,您可能感兴趣