繁体   English   中英

如何在Android OpenCV中执行图像RGB标准化?

[英]How to perform Image RGB Normalization in Android OpenCV?

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

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

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

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

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

我可能没有正确编写此功能。 请帮助。

我还附上了我的结果的屏幕截图。 如果您查看此图像,则只有一半的部分看起来已归一化(但实际上未对其进行归一化,只是看起来是这样)而另一半则没有。 为了解决这个问题,我尝试在for循环中使用cols更改行,结果是相同的。

在此处输入图片说明

还提供了此代码。

期待一些帮助。 (仅供参考-我完全是openCV的新手)。 感谢您的理解。

void NormalizeRGB(JNIEnv*, jobject, jlong img)
{
    Mat& imgM  = *(Mat*)img;
    vector<Mat> 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<Vec3b>(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<Vec3b>(i, j) = bgrPixel;
        }
    }
}

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

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

我试图将其读取为Vec3〜曾经导致上述问题。

有了这个小小的变化,我就能获得预期的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM