如何在Android OpenCV中执行图像RGB规范化?

我正在尝试使用OpenCV 2.4.8 for Android执行图像规范化。 我的测试设备是三星S3。

我已经编写了如下所示的JNI函数来执行图像规范化。

我对图像规范化的定义如下:

r' is 255* r/(r+g+b) g' is 255* g/(r+g+b) b' is 255* b/(r+g+b) 

现在我需要实现这一点。 我写了一个函数来执行此操作。 这似乎不起作用。 我对我的应用程序的其他部分充满信心(即它们没有bug)。 只有这部分会导致问题。

我可能没有正确编写此function。 请帮忙。

我还附上了我的结果截图。 如果你看一下这个图像,只有一半看起来是标准化的(但它实际上没有标准化,只是看起来那样)而另一半看不到。 为了解决这个问题,我尝试在for循环中使用cols更改行,结果是相同的。

在此处输入图像描述

还提供了此代码。

期待一些帮助。 (仅供参考 – 我对openCV来说是全新的)。 感谢您的理解。

 void NormalizeRGB(JNIEnv*, jobject, jlong img) { Mat& imgM = *(Mat*)img; vector rgb; int cols = imgM.cols; int rows = imgM.rows; for(int i = 0; i<rows; i++) { for(int j = 0; j<cols; j++) { Vec3b bgrPixel = imgM.at(i, j); float total = bgrPixel.val[0] + bgrPixel.val[1] + bgrPixel.val[2] + 0.00001; bgrPixel.val[0] = (uchar) 255*bgrPixel.val[0]/total; bgrPixel.val[1] = (uchar) 255*bgrPixel.val[1]/total; bgrPixel.val[2] = (uchar) 255*bgrPixel.val[2]/total; imgM.at(i, j) = bgrPixel; } } } 

我找到了解决问题的方法。

我试图使用此function来读取RGBA矩阵图像。 RGBA矩阵图像的类型为Vec4。

我试图把它读作Vec3~这用来引起上述问题。

通过这个小小的改变,我得到了我预期的结果。