OpenCV_java学习路线(3_像素值的读写

1、单通道图片/灰度图

get()和put()方法
话不多说上代码

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;

// 修改和显示单通道图片
public class demo4 {
	public static void main(String[] args) {
		System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
		// 新建一个 长600 宽700  8位无符号单通道  白色填充 的 mat
		Mat grayim = new Mat(new Size(600,700),CvType.CV_8UC1, new Scalar(255));
		// 新建一个拷贝,用来做对比
		Mat grayim_cp = grayim.clone();
		// 窗口显示拷贝的图片
		HighGui.imshow("grayim", grayim_cp);
		
		// 遍历所有像素点,并修改像素值
		for(int i=0;i<grayim.cols();i++) {
			for(int j=0;j<grayim.rows();j++) {
				double[] a = grayim.get(i, i);	// 获取坐标为 (i,j) 的像素值
				a[0] = (i+j)%255;
				grayim.put(i, j, a);	// 设置坐标为(i,j)的像素值
			}
		}
		
		// 窗口显示修改后图片
		HighGui.imshow("test", grayim);
		HighGui.waitKey();
		HighGui.destroyAllWindows();
	}
}

OpenCV_java学习路线(3_像素值的读写_第1张图片

2、三(多)通道图片

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;

public class demo5 {
	public static void main(String[] args) {
		System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
		
		//						大小 500x500			8位无符号3通道			  r     g    b
		Mat colorImg = new Mat(new Size(700, 600), CvType.CV_8UC3, new Scalar(200, 100, 150));
		Mat colorImg_cp = colorImg.clone();	// 获取一份拷贝
		
		for(int j=0;j<colorImg.rows();j++) {
			for(int k=0;k<colorImg.cols();k++) {
				// 获取 坐标(j,k)的 三个通道的像素值
				// 因为colorImg是一张三通道的图片,因此获取的数组长度为3
				// 三种色彩的顺序为:b g r  蓝 绿 红
				double[] a = colorImg.get(j, k);
				a[0] = (j+k)%255;	// 蓝色 b
				a[1] = (j+k)%255;	// 绿色 g
				a[2] = 0;			// 红色 r
				colorImg.put(j, k, a);	// 将数组a的值覆盖到 坐标(j,k)的像素
			}
		}
		HighGui.imshow("colorimg", colorImg_cp);	// 窗口显示原图片
		HighGui.imshow("changed", colorImg);		// 窗口显示修改后图片
		
		HighGui.waitKey();
		HighGui.destroyAllWindows();
	}
}

OpenCV_java学习路线(3_像素值的读写_第2张图片

你可能感兴趣的:(opencv)