java - OpenCV for android 与 openCV for windows 的不同结果

标签 java android c++ opencv image-processing

我正在编写一个正在进行图像处理的 android 应用程序- 我在 Android 和 PC 上使用相同的 jpg 图像。 我的代码由具有 JNI 访问权限的库代码组成,它接受 Mat 对象并返回 RGB 的平均值 库中的代码是

cv::Scalar Lum_Y, stDEV_Y, Lum_BGR, stDEV_BGR;
double  Lum_Y_orig, stDEV_Y_orig, Slope_orig;

meanStdDev(ROIImage,Lum_Y,stDEV_Y);

Logger::getInstance()->log("Origin_Mean_R",Lum_Y.val[2]);
Logger::getInstance()->log("Origin_Mean_G",Lum_Y.val[1]);
Logger::getInstance()->log("Origin_Mean_B",Lum_Y.val[0]);

当我从我的 PC 上运行这个方法时,我得到了与 Photoshop 和 ImageJ 相对应的结果。 当我从 android 运行完全相同的代码时,结果是不同的——有多少? 通过 +- 1。 这对我的算法至关重要。

我验证了两个图像都作为 BGR 加载,在 Android 部分我这样做:

Bitmap bim = BitmapFactory.decodeStream(imageStream);

    Mat ImageMat = new Mat ( bim.getHeight(), bim.getWidth(), CvType.CV_8UC4, new Scalar(4));
    Bitmap myBitmap32 = bim.copy(Bitmap.Config.ARGB_8888, true);
    Utils.bitmapToMat(myBitmap32,ImageMat);

    //ImageMat.convertTo(m, rtype);.
    Mat mat2 = new Mat();
    Imgproc.cvtColor(ImageMat, mat2, Imgproc.COLOR_RGBA2BGR);

我什至尝试直接从 android 运行 opencv mean calc,结果与从 JNI 运行完全一样。

有人可以帮助解决这个问题吗?在我看来,这与截断产生的差异很大。

提前致谢。

最佳答案

Berak 是正确的 - 谢谢。

当对 PNG 图像进行相同的分析时 - 参数是准确的。

再次感谢

关于java - OpenCV for android 与 openCV for windows 的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24528412/

相关文章:

java - 在Java中通过txt文件创建对象到数组中

android:layout_weight 无法正常工作

c++ - 将字节连接到字符串

c++ - 使用结构 vector 时输出错误

android - 搜索 Sqlite 全文搜索没有变音符号的阿拉伯语

c++ - glFrustum() 与 gluLookAt() 相比的解释

java - 在一个项目中混合 java、scala 和 xtend 文件?

java - 如何根据屏幕分辨率调整布局和 ScrollView 的大小

java命名空间冲突

android - 无法加载广告(错误 1)