[OpenCV学习日记-java]-04-Mat对象通道与算术操作

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 对象(第二次示范那个)

噗!!! 合着上面几个算术操作就是为了调整亮度和对比度

得了 代码和图我也就不发了,都是上面的东西!!!


发布了25 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_18604209/article/details/104031958