Java 使用OpenCV实现RGB到LMS颜色空间的转换

Java 使用OpenCV实现RGB到LMS颜色空间的转换,java,opencv,rgb,Java,Opencv,Rgb,我在理解如何使用opencv正确地将矩阵类型用于从rgb颜色空间到lms颜色空间的颜色转换时遇到问题。我找到的报纸是。我想做的是简单地计算lms颜色三元组,如下所示: Mat actRGBVec = new Mat(1,3,Imgproc.COLOR_RGB2BGR); Mat lmsResVec = new Mat(1,3,CvType.CV_64FC3); lmsMat = new Mat(inputImg.rows(),inputImg.cols(),CvType.CV_64FC3);

我在理解如何使用opencv正确地将矩阵类型用于从rgb颜色空间到lms颜色空间的颜色转换时遇到问题。我找到的报纸是。我想做的是简单地计算lms颜色三元组,如下所示:

Mat actRGBVec = new Mat(1,3,Imgproc.COLOR_RGB2BGR);
Mat lmsResVec = new Mat(1,3,CvType.CV_64FC3);

lmsMat = new Mat(inputImg.rows(),inputImg.cols(),CvType.CV_64FC3);

// iterate through all pixels and multiply rgb values with the lms transformation matrix
try {
  for (int x = 0; x < inputImg.rows(); x++) {
    for (int y = 0; y < inputImg.cols(); y++) {
      actRGBVal = inputImg.get(x, y);

      // vector holding rgb info
      actRGBVec.put(0, 0, actRGBVal);
      Core.gemm(lmsTransformMat, actRGBVec, 1, null, 0, lmsResVec, 0);

      lmsMat.put(x, y, lmsResVec.get(0, 0));
    }
  }
}
catch (Exception e) {
  Log.d("ImageHandler","Error rgb to lms conversion! " + e.getMessage());
}
Mat actRGBVec=新的Mat(1,3,Imgproc.COLOR_RGB2BGR);
材料lmsResVec=新材料(1,3,CvType.CV_64FC3);
lmsMat=new Mat(inputImg.rows(),inputImg.cols(),CvType.CV_64FC3);
//迭代所有像素并将rgb值与lms变换矩阵相乘
试一试{
对于(int x=0;x
lmsMat为CV_64FC3型。inputImg类型为Imgproc.COLOR\U RGB2BGR。lmsTransformMat的类型为CV_64FC1(因为它只包含标量值,所以应该是正确的类型?)

异常显示:rgb到lms转换错误!无效的
我做错了什么?

确保所有矩阵的尺寸和类型正确:

  • inputImage
    不能是
    Imgproc.COLOR\u RGB2BGR
    类型。这是一个常量,用于
    cvtColor
    函数,而不是OpenCV矩阵类型。由于您的输入图像可能是彩色图像,这将使正确的类型
    CV_8UC3
  • lmsTransformMat
    应为
    CV_64FC1
    类型的3x3矩阵
  • actRGBVec
    需要是与
    lmsTransformMat
    相同类型的3x1矩阵。(同样:
    Imgproc.COLOR\u RGB2BGR
    不是矩阵类型)
  • lmsResVec
    需要是与
    lmsTransformMat
    类型相同的3x1矩阵。(您只需使用
    new Mat()
    即可。OpenCV将在
    Core.gemm
    中处理它)
  • lmsMat
    看起来不错
此外,将
null
作为
src3
参数传递给
Core.gemm
。这就是导致
NullPointerException
的原因。由于您的
beta
参数是
0
,因此您可以只提供
new Mat()
而不是
null