2014-07-02 44 views
1

我正在写一个Android应用程序,它正在做图像处理 - 我使用相同的jpg图像为Android和PC。 我的代码包括使用JNI访问库中的代码,它接受垫目标和库返回平均值为RGB 代码是OpenCV for android与openCV for windows不同的结果

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]); 

当我从我的电脑运行这个方法我得到的结果它们的通讯员到Photoshop和ImageJ。 当我从android运行相同的确切代码的结果是不同的 - 多少? by + - 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); 

我甚至试图运行的OpenCV直接从Android的平均计算,结果是完全一样的JNI运行。

有人可以帮助解决这个问题吗?在我看来,这是截然不同的很大一部分。

在此先感谢。

+2

所有这些只是由于有损jpg压缩。避免jpg的图像处理! – berak

回答

0

贝拉克是正确的 - 谢谢你。

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

再次感谢你