您的位置 首页 java

Java,OpenCV,分割图像,提取图像RGB、图像放大缩小、图像裁剪

分割图像,提取图像的RGB三原色(Core.split)

一个普通的彩色图像的每个像素点是由RGB三种颜色构成的,那么这种图像就是3通道图像;多通道图像,单独的R色、G色和B色都分别称为一个单通道图像。

OpenCV中的Mat类型可以理解为一种多维多通道的矩阵,如果一个普通的彩色图像读进来后赋值给一个Mat类型的对象M,那么这个M就是一个二维数组,这个二维数组中的每个元素都是一个含有三个RGB值得数据,那这个M就是一个二维三通道的矩阵。

案例代码

 package com.what21.opencv01.demo03;

import java.util.List;

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;

/**
 * 分割图像
 */public class OpenCVSplitRGB {

    static {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    }

    /**
     * -Djava.library.path=D:/Apps/MyTool/opencv/build/java/x64
     * @param args
     * @throws Exception
     */    public static void main(String[] args) throws Exception {
        Mat src = Imgcodecs.imread("D:/1.jpg");
        // 提取图像的RGB三原色(Core.split)
        List<Mat> dst = new java.util.ArrayList<Mat>(3);
        Core.split(src, dst);
        Imgcodecs.imwrite("D:/1_b.jpg", dst.get(0));
        Imgcodecs.imwrite("D:/1_g.jpg", dst.get(1));
        Imgcodecs.imwrite("D:/1_r.jpg", dst.get(2));
    }

}  

1.jpg

1_b.jpg

1_g.jpg

1_r.jpg

图像放大缩小,修改图像大小(Imgproc.resize)

修改图像大小,就是改变矩阵的行数,通过插值的方式来改变图像的尺寸。

Imgproc.resize()方法参数:src:输入,原图像,即待改变大小的图像;dst:输出,改变大小之后的图像,这个图像和原图像具有相同的内容,只是大小和原图像不一样而已;dsize:输出图像的大小。如果这个参数不为0,那么就代表将原图像缩放到这个Size(width,height)指定的大小;如果这个参数为0。

案例代码

 package com.what21.opencv01.demo03;

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

/**
 * 修改图像大小
 */public class OpenCVResize {

    static {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    }

    public static void main(String[] args) {
        Mat src = Imgcodecs.imread("D:/1.jpg");
        Mat dst = src.clone();
        // 图片缩小
        float scale = 0.5f;
        float width = src.width();
        float height = src.height();
        // 缩小
        Imgproc.resize(src, dst, new Size(width * scale, height * scale));
        Imgcodecs.imwrite("D:/1-1.jpg", dst);
        // 放大
        scale = 1.5f;
        Imgproc.resize(src, dst, new Size(width * scale, height * scale));
        Imgcodecs.imwrite("D:/1-2.jpg", dst);
        // 指定尺寸
        Imgproc.resize(src, dst, new Size(400, 400));
        Imgcodecs.imwrite("D:/1-3.jpg", dst);
    }

}  

效果:

1-1.jpg

1-2.jpg

1-3.jpg

图像裁剪(Trimming Rect)

Rect矩阵类,成员变量x、y、width、height,分别为左上角点的坐标和矩形的宽和高。

常用的成员函数有:size(): 返回值为一个size;area(): 返回矩形的面积;contains(Point): 用来判断点是否在矩形内;inside(Rect): 函数判断矩形是否在该矩形内;tl(): 返回左上角点坐标;br(): 返回右下角点坐标;

案例代码

 package com.what21.opencv01.demo03;

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Rect;
import org.opencv.imgcodecs.Imgcodecs;

/**
 * 图像裁剪(Trimming Rect)
 */public class OpenCVTrimmingRect {

    static {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    }

    /**
     * -Djava.library.path=D:/Apps/MyTool/opencv/build/java/x64
     *
     * @param args
     */    public static void main(String[] args) {
        Mat src = Imgcodecs.imread("D:/1.jpg");
        System.out.println("width:" + src.cols());
        System.out.println("height:" + src.rows());
        Rect roi = new Rect(0, 0, 500, 350);
        //指定图像格式大小
        Mat dst = new Mat(src, roi);
        Imgcodecs.imwrite("D:/1_1.jpg", dst);
    }

}  

效果

文章来源:智云一二三科技

文章标题:Java,OpenCV,分割图像,提取图像RGB、图像放大缩小、图像裁剪

文章地址:https://www.zhihuclub.com/170904.shtml

关于作者: 智云科技

热门文章

网站地图