OpenCV-选取图像局部区域(java版)

OpenCV-选取图像局部区域

Mat类提供了多种获取图像局部区域的方法

1.imshow()

1.单行或单列选择

获取图像的某一行或某一列,可以使用row()函数或者col()函数

方法说明row(int y)提取第y行图像col(int x)提取第x列数据

示例:

    public static void main(String[] args) {
        String libraryPath= System.getProperty("user.dir")+"\\lib\\opencv_java460.dll";
        System.load(libraryPath);

        Mat mat =new Mat(200,200, CvType.CV_8UC3,new Scalar(255,0,0));

        for (int i=0;i<200;i++){

            mat.put(0,i,0,255,0);
            mat.put(199,i,0,0,255);
        }

        HighGui.imshow("matRow",mat.row(0));

        HighGui.imshow("matCol",mat.col(1));
        HighGui.imshow("mat",mat);
        HighGui.waitKey(0);
    }

2.多行或多列选择

Range 对象可以用来表示矩阵的多个连续的行或者多个连续的列。其表示的范围为从 start
到 end,包含 start,但不包含 end。

方法说明Range(Range r)( 提取第s到e行(列)之间的图像)rowRange(Range r)提示第s到e行之间的图像colRange(Range r)提示第s到e列之间的图像

示例:

    public static void main(String[] args) {
        String libraryPath= System.getProperty("user.dir")+"\\lib\\opencv_java460.dll";
        System.load(libraryPath);

        Mat mat =new Mat(200,200, CvType.CV_8UC3,new Scalar(255,0,0));

        HighGui.imshow("matRowRange",mat.rowRange(new Range(0,20)));
        HighGui.imshow("matColRange",mat.colRange(new Range(0,20)));
        HighGui.waitKey(0);
    }

2.submat()函数

OpenCV-选取图像局部区域(java版)
为演示效果明显,用上图做演示。图像 宽:510 高: 340
Imgcodecs.imread()表示读取图像。

; 1.Rect

OpenCV-选取图像局部区域(java版)

方法说明Rect(int x, int y, int width, int height)从图像坐标x,y的地方为起点,提取宽width高height 的图像(从左上角开始到右下角) 示例

    public static void main(String[] args) {
        String libraryPath= System.getProperty("user.dir")+"\\lib\\opencv_java460.dll";
        System.load(libraryPath);
        Mat img = Imgcodecs.imread("shu.jpg");
        int rows=img.rows();
        int cols=img.cols();
        System.out.println("原img>>rows:"+rows+" cols:"+cols);

        Rect rect = new Rect(140,100,200,200);
        Mat submat = img.submat(rect);
        rows=submat.rows();
        cols=submat.cols();
        System.out.println("submat>>rows:"+rows+" cols:"+cols);
        HighGui.imshow("submat",submat);

        HighGui.waitKey(0);
    }

运行结果

OpenCV-选取图像局部区域(java版)
控制台输出

原img>>rows:340 cols:510
submat>>rows:200 cols:200

2.Range

OpenCV-选取图像局部区域(java版)

方法说明Range(Range r)( 提取第s到e行(列)之间的图像) submat(Range rowRange, Range colRange) 顾名思义,提取s到e行,s列到e列之间的交集图像submat(Range[] ranges) 数组,将rowRange和colRange放在数组中,效果与上方效果一样,默认ranges[0]为rowRange,ranges[0]为colRange 示例

submat(Range rowRange, Range colRange)

    public static void main(String[] args) {
        String libraryPath= System.getProperty("user.dir")+"\\lib\\opencv_java460.dll";
        System.load(libraryPath);
        Mat img = Imgcodecs.imread("shu.jpg");
        int rows=img.rows();
        int cols=img.cols();
        System.out.println("原img>>rows:"+rows+" cols:"+cols);

        Range rowRange = new Range(0,145);
        Range colRange = new Range(100,300);
        Mat submat = img.submat(rowRange,colRange);
        rows=submat.rows();
        cols=submat.cols();
        System.out.println("submat>>rows:"+rows+" cols:"+cols);
        HighGui.imshow("submat",submat);
        HighGui.waitKey(0);
    }

运行结果

OpenCV-选取图像局部区域(java版)
控制台输出

原img>>rows:340 cols:510
submat>>rows:145 cols:200

示例

OpenCV-选取图像局部区域(java版)

submat(Range[] ranges)

将上文代码修改下,为验证效果,反转下range值

    public static void main(String[] args) {
        String libraryPath= System.getProperty("user.dir")+"\\lib\\opencv_java460.dll";
        System.load(libraryPath);
        Mat img = Imgcodecs.imread("shu.jpg");
        int rows=img.rows();
        int cols=img.cols();
        System.out.println("原img>>rows:"+rows+" cols:"+cols);
        Range rowRange = new Range(0,145);
        Range colRange = new Range(100,300);

        Range[] ranges ={colRange,rowRange};
        Mat submat = img.submat(ranges);
        rows=submat.rows();
        cols=submat.cols();
        System.out.println("submat>>rows:"+rows+" cols:"+cols);
        HighGui.imshow("submat",submat);
        HighGui.waitKey(0);
    }

效果

OpenCV-选取图像局部区域(java版)

3.submat()

方法说明 submat(int rowStart, int rowEnd, int colStart, int colEnd)从rowStart行到rowEnd行,colStart列到colEnd列提取图像

&#x7528;&#x6CD5;&#x548C;submat(Range rowRange, Range colRange)&#x4E00;&#x6837;

4.diag()

取对角线元素,参数 d=0 时,表示取主对角线;当参数 d>0 时,表示取主对角线下方的次对角线,如 d=1 时,表示取主对角线下方,且紧贴主多角线的元素;当参数 d

Original: https://blog.csdn.net/qq_27185879/article/details/126629600
Author: 不要喷香水
Title: OpenCV-选取图像局部区域(java版)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/703931/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球