OpenCV Java,读取中心像素的HSV值

时间:2017-08-07 02:50:40

标签: java c++ opencv

我似乎从下面的代码中获得了超过3个值,但是只假设有3个值,H,S和V?我做错了什么?

代码:

if (getIntent().hasExtra("byteArray")) {

            bitmap = BitmapFactory.decodeByteArray(getIntent().getByteArrayExtra("byteArray"), 0, getIntent().getByteArrayExtra("byteArray").length);

            int width= bitmap.getWidth();
            int height=bitmap.getHeight();

            int centerX=width/2;
            int centerY=height/2;
            srcMat = new Mat();
            Utils.bitmapToMat(bitmap, srcMat);
            //Imgproc.cvtColor(srcMat, matHSV, Imgproc.COLOR_BGR2HSV);
            srcMat.convertTo(srcMat, CvType.CV_64FC3); //http://answers.opencv.org/question/14961/using-get-and-put-to-access-pixel-values-in-java/
            int size = (int) (srcMat.total() * srcMat.channels());
            Mat matHSV = new Mat();
            Utils.bitmapToMat(bitmap, matHSV);
            double[] data = new double[size];

            srcMat.get(centerX, centerY, data);
            for (int i = 0; i < size; i++){
                data[i] = (data[i] / 2);  // no more casting required.
                Log.e("HSV Values:", String.valueOf(data[i]));
            }



        }

输出:

我使用Log.e打印了很多值,即使我在技术上假设只获得3个值,H,S&amp;诉

enter image description here

1 个答案:

答案 0 :(得分:1)

您没有打印HSV值。

您的data变量是一个双精度数组,其单元格数等于原始图像的像素数乘以通道数,因为您计算了{{1}的值}变量不正确。您正在迭代该数组并在每次迭代中打印其每个元素,因此您打印的是size值。

如果您想获得中心单个像素的HSV值,请执行以下操作:

channels * width * height

现在,数组包含您想要的3个值。

或者,您可能想要这样做:

double[] data = srcMat.get(centerX, centerY);

而不是:

 int size = (int) (srcMat.channels());