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);
更改像素值使用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);
相关文章推荐
- 来自一本国外OpenCV2书籍的示例-遍历图像像素的14种方法
- OpenCV学习笔记(七)—— OpenCV for Android实时图像处理
- OpenCV学习笔记(七)—— OpenCV for Android实时图像处理
- opencv中遍历每一个像素点进行处理
- android中opencv操作图片像素----之图像灰度处理
- Opencv 访问Mat中像素的值的快速方法
- 遍历OpenCV中Mat结构最快速的方法
- 【Python+OpenCV】图片局部区域像素值处理(改进版)-一种特征提取方法
- opencv开发笔记(七):三种方法遍历图像操作像素
- opencv高效访问图像像素(遍历像素的方法总结)
- opencv中遍历图像每个像素点
- javacpp-opencv图像处理3:使用opencv原生方法遍历摄像头设备及调用(增加实时帧率计算方法)
- OpenCV2.4+遍历读写像素方法总结及时间度量
- 实时显示 Opencv处理后的Camera图像 AndroidStudio NDK方法
- opencv2-遍历图像像素的14种方法
- 常见图像处理库(fastVCV、openCV for Android)
- javacpp-opencv图像处理3:使用opencv原生方法遍历摄像头设备及调用(增加实时帧率计算方法)
- OpenCV学习笔记(七)—— OpenCV for Android实时图像处理
- 数字图像处理成长之路16:opencv用于android的几种方法
- opencv中遍历每一个像素点进行处理