OpencvForAndroid快速遍历处理每个像素的方法

来源:互联网 发布:mac股票软件 编辑:程序博客网 时间:2024/05/01 09:33

  在JAVA版的opencv中,获取像素值使用:double[] get(int row, int col)函数

       更改像素值使用put(int row, int col, double... data)函数

一个直接类似C++版的at像素值遍历方法是

// <span style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;">rGray</span><span style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;">,</span><span style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;">sGray</span><span style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;">为使用的Mat格式变量</span><span style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;"></span>        for (int i = 0; i < dImg.height(); i++)       {            for (int j = 0; j < dImg.width(); j++)            {               if (rGray.get(i, j)[0] == 0)                {                    sGray.put(i,j,0);                }            }        }
程序对rGray在(i,j)处的像素值进行判断,若rGray在(i,j)处的像素值为0,则令sGray在(i,j)处的像素值为0.

     这种方法可以完成程序功能,但速度很慢。

     要使程序速度更快,要将Mat数据转换成JAVA原始数据类型进行处理,以下为示例程序,因为我的图像是灰度图,程序中采用byte数组,size变量也没有乘通道数,对彩图进行操作需要相应修改这两点。

        int size = (int) rGray.total();        byte[] rBuff = new byte[size];        byte[] sBuff = new byte[size];        rGray.get(0, 0, rBuff);        sGray.get(0, 0, sBuff);        for(int i = 0; i < size; i++)        {            sBuff[i] = (rBuff[i] == 0) ? 0 : sBuff[i];        }        sGray.put(0, 0, sBuff);



0 0