您的位置:首页 > 移动开发 > Android开发

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

2016-10-13 21:14 1041 查看
  在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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息