0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenCV 如何加载图片

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-10-09 15:01 次阅读

之前也写过一些 OpenCV 的文章,最近正好在考虑 写一个 OpenCV相关的工具,目前还是在开发过程中,边开发边更新。预计会持续一段时间。目前的想法是把 OpenCV 的 API 在这个工具上都实现一遍。

OpenCV 的内容挺多的,而且不使用的话,容易忘记,所以通过制造工具的方式来给自己加深印象,平常要处理图片的时候,就可以用自己的工具直接处理,不需要每次都去重复的写代码。

今天我们就来看看,学习 OpenCV 如何加载图片,显示并保存图片。大部分人可能都知道我们平常使用的图片都是使用RGB表示的,但是 OpenCV 中图片颜色的通道顺序稍微有些不同,它是 B - G - R 的通道顺序保存的。平常所说的灰度图是就只有一个通道。

目标

我们来看看今天是目标是什么?

  • 加载图片,显示图片,保存图片
  • OpenCV中对应的函数是 Cv2.ImRead() , Cv2.ImShow(), Cv2.ImWrite()

加载图片

使用 Cv2.ImRead() 来读入一张图片:

Mat sourceImage = Cv2.ImRead(filePath, ImreadModes.Unchanged);

// 定义
public Mat ImRead(string fileName, ImreadModes flags = ImreadModes.Color)
  • 参数1:图片的文件名
    • 如果图片放在当前文件夹下,直接写文件名就行,如'lena.jpg'
    • 否则需要给出绝对路径,如'D:xxxlena.jpg'
  • 参数2:读入方式,省略即采用默认值 比较常用的是以下三个
public enum ImreadModes
    {
        Unchanged = -1, // 包含透明通道的彩色图
        Grayscale = 0, // 灰度图
        Color = 1, // 彩色图
  ...
    }

注意:我们加载图片的时候,最好不要使用中文路径,容易入坑。

显示图片

使用 Cv2.ImShow() 显示图片,窗口会自适应图片的大小:

Cv2.ImShow("lena", sourceImage);
Cv2.WaitKey(0);

// 定义
public void ImShow(string winName, Mat mat);
public static int WaitKey(int delay = 0);

Cv2.ImShow 参数1是窗口的名字,参数2是要显示的图片。不同窗口之间用窗口名区分,所以窗口名相同就表示是同一个窗口,显示结果如下:

Cv2.WaitKey() ,从字面上看,等待一个输入的意思 , 参数是等待时间(单位:毫秒ms)。时间一到,会继续执行接下来的程序,传入0的话表示一直等待。当我们需要在根据某个输入推出等待的时候,我们可以使用 k = Cv2.WaitKey(0) ,这样 k 就是我们的输入结果。

另外,我们也可以先用 Cv2.NamedWindow() 创建一个窗口,之后再显示图片:

Cv2.NamedWindow("lena2",  1);
Cv2.ImShow("lena", sourceImage);
Cv2.WaitKey(0);

// 定义

public void NamedWindow(string winName, WindowFlags flags = WindowFlags.GuiExpanded)

参数1依旧是窗口的名字,参数2默认是WindowFlags.GuiExpanded,表示窗口展示模式。

保存图片

使用Cv2.ImWrite保存图片,参数1是包含后缀名的文件名, 参数2 是:

Cv2.ImWrite("lena.jpg", sourceImage);

// 定义
public static void ImShow(string winName, Mat mat)

是不是感觉很简单,OpenCV在图片的基础操作上其实都挺简单的,到后面加上一些应用场景之后就会复杂起来。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RGB
    RGB
    +关注

    关注

    4

    文章

    798

    浏览量

    58461
  • 函数
    +关注

    关注

    3

    文章

    4327

    浏览量

    62573
  • 代码
    +关注

    关注

    30

    文章

    4779

    浏览量

    68524
  • OpenCV
    +关注

    关注

    31

    文章

    634

    浏览量

    41337
收藏 人收藏

    评论

    相关推荐

    #硬声创作季 3-3 如何通过OpenCV加载显示图片

    人工智能opencv
    Mr_haohao
    发布于 :2022年08月30日 15:19:33

    #硬声创作季 3-4 两招解决OpenCV加载图片问题

    人工智能opencv
    Mr_haohao
    发布于 :2022年08月30日 15:20:46

    【DragonBoard 410c试用体验】之OpenCV加载图片实验

    OpenCV这里先利用OpenCV载入一张图片并进行显示,其实也就是读取图片代码如下:#include//头文件using namespace cv;//包含cv命名空间void ma
    发表于 09-10 19:16

    【DragonBoard 410c试用体验】cvThreshold阈值操作实现二值图像

    IDLE(9.7)https://bbs.elecfans.com/jishu_937169_1_1.html10、【DragonBoard 410c试用体验】之OpenCV加载图片实验(9.10
    发表于 10-07 22:11

    【NanoPi NEO试用体验】OpenCV使用篇

    本帖最后由 jj1989 于 2016-12-3 20:56 编辑 在上一篇文章中,介绍了USB摄像头的使用,这次介绍一下OpenCV的简单使用,以打开一张图片为例。一、OpenCV简介
    发表于 12-03 20:56

    Opencv图片处理

    Opencv-培训(一)
    发表于 06-12 12:28

    【HarmonyOS】鸿蒙图片加载工具汇总

    1、最常用的图片加载工具——GlideGlide 是一个快速高效的 openharmony 图像加载库,专注于平滑滚动。Glide 提供了一个易于使用的 API、一个高性能和可扩展的资源解码管道
    发表于 03-25 13:51

    求助,OpenCV的imread接口读取进来的JPG图片尺寸问题

    OpenCV的imread接口读取进来的JPG图片尺寸问题
    发表于 09-19 07:52

    OpenCV3编程入门-源码例程全集-查找和绘制图片轮廓矩

    OpenCV3编程入门-源码例程全集-查找和绘制图片轮廓矩
    发表于 09-17 22:54 2次下载

    如何使用OpenCV来实现模型加载与推演

    今早在GitHub上收到一则issue,发信人为Suaro。 Suaro希望使用OpenCV来实现模型加载与推演,但是没有成功,因此开了issue寻求我的帮助。 现场围观该Issue: https
    的头像 发表于 11-27 09:43 2389次阅读

    基于openharmony适配移植的图片加载

    项目介绍 项目名称:Sketch 所属系列:openharmony的第三方组件适配移植 功能:一款强大且全面的图片加载器,除了图片加载的必备功能外,还支持 GIF,手势缩放、分块显示超
    发表于 03-22 14:41 3次下载

    opencv读入图片注意事项详解1

    深度学习数据预处理中常用opencv读入图片,一般在`__getitem__`函数中调用。本文主要介绍opencv读取图片的一些细节以及注意事项。本文中使用的
    的头像 发表于 02-07 16:06 621次阅读

    opencv读入图片注意事项详解 2

    深度学习数据预处理中常用opencv读入图片,一般在`__getitem__`函数中调用。本文主要介绍opencv读取图片的一些细节以及注意事项。本文中使用的
    的头像 发表于 02-07 16:06 659次阅读

    如何在LabVIEW中清晰加载图片呢?

    有开发者提出,在使用LabVIEW开发图片加载显示程序时,为什么明明看着很清晰的图片,LabVIEW加载显示后就变得粗糙,线条不流畅。
    的头像 发表于 12-20 09:08 1787次阅读
    如何在LabVIEW中清晰<b class='flag-5'>加载</b><b class='flag-5'>图片</b>呢?

    【AWTK使用经验】加载和释放外部图片

    指定路径的图片资源AWTK默认加载资源方式有两种,一种是将资源打包到程序中放入Flash,另一种是放在res资源目录中。假设现在需要实现一个图片浏览器并移植到ZT
    的头像 发表于 04-26 08:25 471次阅读
    【AWTK使用经验】<b class='flag-5'>加载</b>和释放外部<b class='flag-5'>图片</b>