【OpenCV & Java 教程02】图像处理基本操作

本节将简单介绍读取图像、显示图像、保存图像这几项基本操作。

本文使用代码如下:

import org.junit.Test;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;

import java.net.URL;

import static org.opencv.highgui.HighGui.*;

public class Demo {

    static {
        // 加载动态库
        URL url = ClassLoader.getSystemResource("lib/opencv/opencv_java3416.dll");
        System.load(url.getPath());
    }

    /**
     * 图像的加载、显示以及保存
     */
    @Test
    public void demo() throws Exception {

        // 加载图像
        Mat imread = Imgcodecs.imread("src/main/resources/img/lena.png");
        if (imread.empty()) {
            throw new Exception("image is empty");
        }

        //显示图像
        imshow("original img", imread);

        //保存图像
        Imgcodecs.imwrite("D:/lena_2.png", imread);

        Mat greyMat = Imgcodecs.imread("D:/lena_2.png", Imgcodecs.IMREAD_GRAYSCALE);
        imshow("wirtted Img show by grey", greyMat);

        waitKey();
        destroyAllWindows();
    }
}


        代码运行成功后会先读取 resources/img 文件夹下的 lena.png 图片,并在窗口打开(窗口名称为original img),之后会将图片的副本存至 D:/lena_2.png,然后再读取 D:/lena_2.png 图片,并将图像转为单通道灰度图像在窗口打开(窗口名称为wirtted Img show by grey)


OpenCV官方JavaAPI: OpenCV Java documentation (4.2.0)

 

1. 读取图像

        imread()函数:OpenCV提供了 imread()函数 来读取图像,该函数支持各种静态图像格式。该函数的语法格式为:

static Matimread​(java.lang.String filename)
static Matimread​(java.lang.String filename, int flags)

式中 :

  • Mat:返回值,为读取到的图像。如果未读取到图像,则返回NULL
  • filename:要读取的图像的完整文件名
  • flages:读取标记,即:图像读取模式 ImreadModel),用来控制读取文件的类型,取值如下:
图像读取模式 ImreadModel
数值含义
IMREAD_UNCHANGED-1按原样返回加载的图像(会带上alpha通道),忽略EXIF方向。
IMREAD_GRAYSCALE0将图像转为单通道灰度图像
IMREAD_COLOR1将图像转为BGR三通道彩色图像(默认值)
IMREAD_ANYDEPTH2如果图像深度为16-bit/32-bit则会返回该深度图像,否则返回8-bit图像
IMREAD_ANYCOLOR4按照任何可能的颜色格式读取图像
IMREAD_LOAD_GDAL8使用gdal驱动程序加载图像
IMREAD_REDUCED_GRAYSCALE_216将图像转为单通道灰度图,且图像尺寸变为1/2
IMREAD_REDUCED_COLOR_217将图像转为BGR三通道彩色图像,且图像尺寸变为1/2
IMREAD_REDUCED_GRAYSCALE_432将图像转为单通道灰度图,且图像尺寸变为1/4
IMREAD_REDUCED_COLOR_433将图像转为BGR三通道彩色图像,且图像尺寸变为1/4
IMREAD_REDUCED_GRAYSCALE_864将图像转为单通道灰度图,且图像尺寸变为1/8
IMREAD_REDUCED_COLOR_865将图像转为BGR三通道彩色图像,且图像尺寸变为1/8
IMREAD_IGNORE_ORIENTATION128忽略EXIF中的方向标识,不旋转图

 

2. 显示图像 

        imshow()函数:OpenCV提供了 imshow()函数 来显示图像。直接调用该函数会创建一个指定名称的新窗口,并将图像显示在刚创建的窗口内。

static voidimshow​(java.lang.String winname, Mat img)

式中:

  • winname:窗口名称
  • img:要显示的图像。

3. 保存图像 

        imwrite()函数:OpenCV提供了 imwrite()函数 来保存图像至指定位置。

static booleanimwrite​(java.lang.String filename, Mat img)
static boolean

imwrite​(java.lang.String filename, Mat img, MatOfInt params)

式中:

  • filename:要保存的目标文件的完整路径名,包含文件扩展名。
  • img:被保存图像的名称。
  • params:保存类型参数。
  • 返回值:如果保存成功,则返回True;如果保存不成功,则返回False。

4. 其他涉及到的函数

4.1 waitKey函数

        waitKey()用来等待按键,当用户按下键盘后,该语句会被执行,并获取返回值。

static voidwaitKey()
static intwaitKey​(int delay)

式中: 

  • delay:表示等待键盘触发的时间,单位是ms。当该值是负数或者零时,表示无限等待。该值默认为0。
  • 返回值:若等待键盘触发的时间到期时,仍没有按键被按下,则返回-1;如果在等待期间有按键被按下,则返回该按键的ASCII码

4.2 destroyWindow函数

        destroyWindow()用来释放(销毁)指定窗口。

static voiddestroyWindow​(java.lang.String winname)

式中: 

  • winname:窗口的名称

 

4.3 destroyAllWindows函数

        destroyAllWindows用来释放(销毁)所有窗口。

static voiddestroyAllWindows()
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WLP_China

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值