Mat对象通道操作
图像通道分离
实现代码如下
split(Mat m,List<Mat> mv)//通道分离
下面用一段代码展示
获取Mat对象的channels之后 如果通道数目大于1 那么就可以使用通道分离
//首先获取图像的通道数 宽度 和 高度
int channels = m1.channels();
if(channels>1){
List<Mat> ms = new ArrayList<>();//Mat集合
Core.split(m1,ms);//通道分离
int i = 0;//下标
for (Mat mat : ms){
HighGui.imshow(String.valueOf(i++)+"通道",mat);
}
}
运行结果:
图像通道合并
实现代码如下
merge(List<Mat> mv,Mat dst)//通道合并
下面用代码展示上面分离的通道合并了
Mat hebing = new Mat();//创建对象
Core.merge(ms,hebing);//合并通道
HighGui.imshow("通道合并后",hebing);//展示
算术操作
Mat对象可以进行 加 减 乘 除 运算,最常用的方法如下
add(Mat src1,Mat src2 ,Mat dst)
subtract(Mat src1,Mat src2 ,Mat dst)
multiply(Mat src1,Mat src2 ,Mat dst)
divide(Mat src1,Mat src2 ,Mat dst)
参数解释:
- src1 : 输入的第一个Mat对象
- src2 : 输入的第二个Mat对象
- dst: 操作后输出的对象
src2的参数还可以是个Scalar对象(纯色)
当src1和src2都为Mat的时候 需要注意的是 他们两个图像的大小与类型必须一致
下面我通过一个例子演示
Mat m1 = Imgcodecs.imread("C:\\test\\256_256_t1.png" );
Mat m2 = Imgcodecs.imread("C:\\test\\256_256_t2.png" );
//读入的两张尺寸一模一样的
HighGui.imshow("256_256_t1.jpg",m1);
HighGui.imshow("256_256_t2.jpg",m2);
//加法运算
Mat dst1 = new Mat();
Core.add(m1,m2,dst1);
HighGui.imshow("加法运算",dst1);
//减法运算
Mat dst2 = new Mat();
Core.subtract(m1,m2,dst2);
HighGui.imshow("减法运算",dst2);
//乘法运算
Mat dst3 = new Mat();
Core.multiply(m1,m2,dst3);
HighGui.imshow("乘法运算",dst3);
//除法运算
Mat dst4 = new Mat();
Core.divide(m1,m2,dst4);
HighGui.imshow("除法运算",dst4);
至于运算结果…
可能是我太文盲了 实在想不到有啥用
感觉只有加减可以用用,乘除就不知道了…
不过后来我有试了试纯颜色的Scalar对象
这里总算是看到了一丝丝希望,不在感觉乘除没啥用似的
下面是实现代码
Mat m1 = Imgcodecs.imread("C:\\test\\256_256_t1.png" );
Scalar m2 = new Scalar(10,10,10);
HighGui.imshow("256_256_t1.jpg",m1);
//加法运算
Mat dst1 = new Mat();
Core.add(m1,m2,dst1);
HighGui.imshow("加法运算",dst1);
//减法运算
Mat dst2 = new Mat();
Core.subtract(m1,m2,dst2);
HighGui.imshow("减法运算",dst2);
//乘法运算
Mat dst3 = new Mat();
Core.multiply(m1,m2,dst3);
HighGui.imshow("乘法运算",dst3);
//除法运算
Mat dst4 = new Mat();
Core.divide(m1,m2,dst4);
HighGui.imshow("除法运算",dst4);
调整亮度和对比度
图像的连读和对比度是图像的两个基本的属性,
-
亮度 对RGB色彩来说,对应的RGB值越大,越接近于255 反之越小越接近于0
-
对比度 描述图像颜色之间的差异
亮度 : 使用上面介绍的加减法操作
对比度 : 使用乘除法
调整亮度就是把上面的m2 使用 Scalar 对象(第二次示范那个)
噗!!! 合着上面几个算术操作就是为了调整亮度和对比度
得了 代码和图我也就不发了,都是上面的东西!!!