1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > OpenCV-像素值读写(java版)

OpenCV-像素值读写(java版)

时间:2019-09-03 08:19:01

相关推荐

OpenCV-像素值读写(java版)

像素值的读写

1. 读像素值1.get()函数2.示例2.写像素值1.put()函数

很多时候,我们需要读取某个像素值,或者设置某个像素值,甚至需要遍历整个像素值。

OpenCV中RGB图像的通道为BGR!!!

1. 读像素值

1.get()函数

OpenCV中使用get()方法来实现读去矩阵中的某个像素。下方是提供的方法

2.示例

以下以CV_8UC3为例,对上述部分方法进行演示

get(row,col)

执行下方main方法

public static void main(String[] args) {String libraryPath= System.getProperty("user.dir")+"\\lib\\opencv_java460.dll";System.load(libraryPath);Mat mat = new Mat(3,3, CvType.CV_8UC3);int rows=mat.rows();int cols=mat.cols();//遍历所有像素值for (int i=0;i<rows;i++){for (int j =0;j<cols;j++){//get(row,col) 演示double[] scalarVal=mat.get(i,j);System.out.println("mat["+i+","+j+"]"+"元素值:B="+scalarVal[0]+"G="+scalarVal[1]+"R="+scalarVal[2]);}}}

结果

mat[0,0]元素值:B=0.0G=0.0R=0.0

mat[0,1]元素值:B=0.0G=0.0R=0.0

mat[0,2]元素值:B=0.0G=0.0R=0.0

mat[1,0]元素值:B=0.0G=0.0R=0.0

mat[1,1]元素值:B=0.0G=0.0R=0.0

mat[1,2]元素值:B=0.0G=0.0R=0.0

mat[2,0]元素值:B=0.0G=0.0R=0.0

mat[2,1]元素值:B=0.0G=0.0R=0.0

mat[2,2]元素值:B=0.0G=0.0R=0.0

2.get(int[] idx)

public static void main(String[] args) {String libraryPath= System.getProperty("user.dir")+"\\lib\\opencv_java460.dll";System.load(libraryPath);Mat mat = new Mat(3,3, CvType.CV_8UC3);//通过ids获取,ids值分别为row,colint[] ids ={1,2};double[] scalarVal= mat.get(ids);System.out.println("元素值:B="+scalarVal[0]+"G="+scalarVal[1]+"R="+scalarVal[2]);}

结果为

元素值:B=0.0G=0.0R=0.0

3.get(int[] idx, byte[] data)

public static void main(String[] args) {String libraryPath= System.getProperty("user.dir")+"\\lib\\opencv_java460.dll";System.load(libraryPath);Mat mat = new Mat(3,3, CvType.CV_8UC3);int[] ids ={1,2};//获取第一行,第2列byte[] data =new byte[mat.channels()];int B = data[0]&0xff;int G = data[1]&0xff;int R = data[2]&0xff;mat.get(ids,data);System.out.println("元素值:B="+B+"G="+G+"R="+R);}

结果

元素值:B=0G=0R=0

2.写像素值

1.put()函数

OpenCV中使用put()方法来实现像素的创建。方法和get()方法相对应。,下方仅举出不一样的几个方法

## 2.示例 1.put(int[] idx, double... data)

public static void main(String[] args) {String libraryPath= System.getProperty("user.dir")+"\\lib\\opencv_java460.dll";System.load(libraryPath);//创建一个200*200 8位3通道的蓝色图像Mat matB =new Mat(200,200, CvType.CV_8UC3,new Scalar(255,0,0));int rows =matB.rows();int cols =matB.cols();for (int i=0;i<rows;i++){for (int j=0;j<cols;j++){if (i>=99 && j>=99){int[] idx={i,j};matB.put(idx,0,255,0);}}}HighGui.imshow("matB",matB);HighGui.waitKey(0);}

执行效果

2.put(int[] idx, byte[] data, int offset, int length)

public static void main(String[] args) {String libraryPath= System.getProperty("user.dir")+"\\lib\\opencv_java460.dll";System.load(libraryPath);//创建一个200*200 8位3通道的蓝色图像Mat matB =new Mat(200,200, CvType.CV_8UC3,new Scalar(255,0,0));int rows =matB.rows();int cols =matB.cols();//创建3*3矩阵图像Mat mat = new Mat(3,3, CvType.CV_8UC3,new Scalar(0,208,91));int[] ids ={1,2};byte[] data =new byte[mat.channels()];mat.get(ids,data);int B = data[0]&0xff;int G = data[1]&0xff;int R = data[2]&0xff;System.out.println("mat初始值:B="+B+",G="+G+",R="+R);for (int i=0;i<rows;i++){for (int j=0;j<cols;j++){if (i>=99 && j>=99){int[] idx={i,j};//赋mat的值给matB,并将元素值向右偏移一位matB.put(idx,data,-1,data.length);}}}//获取 199,199位置的图像元素值int[] ids1 ={199,199};byte[] data1 =new byte[matB.channels()];matB.get(ids1,data1);int B1 = data1[0]&0xff;int G1 = data1[1]&0xff;int R1 = data1[2]&0xff;System.out.println("最终元素值:B="+B1+",G="+G1+",R="+R1);HighGui.imshow("matB",matB);HighGui.waitKey(0);}

执行结果

mat初始值:B=0,G=208,R=91

最终元素值:B=0,G=0,R=208

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。