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();
}
}
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();
}
}