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

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



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值