改变Mat内像素点的信息
1. 转换图像的精度值→浮点类型(日后高斯定理计算,若超出原来范围则需要变化)
Mat dst = new Mat(src.size(), CvType.CV_32FC1);
src.convertTo(dst, CvType.CV_32F);
2. 循环改变图像像素点的信息,主要代码:
byte[] data = new byte[channels*width*height];
src.get(0, 0, data);
int r = 0,g = 0,b = 0;
int gray = 0;
for(int row = 0;row < height;row++) {
for(int col = 0;col < width;col++) {
if(channels == 3) {
b = data[row*channels*width + col*channels]&0xff;
g = data[row*channels*width + col*channels+1]&0xff;
r = data[row*channels*width + col*channels+2]&0xff;
//修改
b = 255 - b;
g = 255 - g;
r = 255 - r;
data[row*channels*width + col*channels] = (byte)b;
data[row*channels*width + col*channels+1] = (byte)g;
data[row*channels*width + col*channels+2] = (byte)r;
}else {
gray = data[row*channels*width + col*channels]&0xff;
gray = 255 - gray;
data[row*channels*width + col*channels] = (byte)gray;
}
}
}
src.put(0, 0, data);
Imgcodecs.imwrite("D:\\openCV_picture\\lena_changed.jpg", src);
*主要方法
src.get(int row, int col, byte[] data);
src.put(int row, int col, byte[] data);
关于&0xff的解释,参考大佬:点此查看