Java 使用OpenCV实现RGB到LMS颜色空间的转换
我在理解如何使用opencv正确地将矩阵类型用于从rgb颜色空间到lms颜色空间的颜色转换时遇到问题。我找到的报纸是。我想做的是简单地计算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);
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
函数,而不是OpenCV矩阵类型。由于您的输入图像可能是彩色图像,这将使正确的类型cvtColor
CV_8UC3
应为lmsTransformMat
类型的3x3矩阵CV_64FC1
需要是与actRGBVec
相同类型的3x1矩阵。(同样:lmsTransformMat
不是矩阵类型)Imgproc.COLOR\u RGB2BGR
需要是与lmsResVec
类型相同的3x1矩阵。(您只需使用lmsTransformMat
即可。OpenCV将在new Mat()
中处理它)Core.gemm
看起来不错lmsMat
null
作为src3
参数传递给Core.gemm
。这就是导致NullPointerException
的原因。由于您的beta
参数是0
,因此您可以只提供new Mat()
而不是null