OpenCV 图像读写和显示

图像读取

ImRead() 函数可从文件中读取图像, 并生成一个Mat对象, ImRead() 函数支持绝大多数图像格式.
注意点:

  • 读取后生成的Mat对象, 颜色空间为BGR,
  • 第二参数为读取方式, 常用的方式有:
    . ImreadModes.Color: 彩色方式读取, 即使原图是4通道或者单通道, 生成的 Mat 永远为三通道.
    . ImreadModes.AnyColor: 按照自适应的方式读取, 如果是灰度图, 生成的Mat为单通道, 如果是彩色图像, Mat将为三通道.
    . ImreadModes.Unchanged : 如果原图带有alpha透明通道, 使用这个方式将同时读取 alpha 通道
    . ImreadModes.Grayscale: 按照灰度模式读取, 生成Mat为单通道

图像的展示

ImShow() 函数可以用于展示Mat, 注意点有:

  • 仅能正常显示BGR色彩空间的Mat, 如果是其他色彩空间的Mat可以显示,但会失真, 如果要显示其他色彩空间的Mat, 需要首先转回BGR空间
  • 两次调用ImShow(), 如果第一个参数 winName 一样, 则只显示最后一次.
  • 如果要将多个图片拼在一起, 可以使用 Cv2.HConcat() 或 Cv2.VConcat(), 水平拼接要求图片有相同高度和MatType类型, 垂直拼接也有类似的要求.

图像保存

ImWrite(filename, mat, params) 函数, 图片的格式需要通过文件的扩展名指定, 通常该函数只能用来保存8UC3或8UC1的BGR Mat图像, 如果颜色空间或通道数不符合要求, 通常需要使用 convertTo() 或 cvtColor() 函数进行转换.

private void showImages()
      {
          string pngFile = @"D:\my_workspace\opencv\images\draw.png";
          var unchangedMode = Cv2.ImRead(pngFile, ImreadModes.Unchanged);
          string unchangedModeInfo = $"channels:{unchangedMode.Channels()}, MatType: {unchangedMode.Type()}";
          var colorMode = Cv2.ImRead(pngFile, ImreadModes.Color);
          string colorModeInfo = $"channels:{colorMode.Channels()}, MatType: {colorMode.Type()}";
          var anyColorMode = Cv2.ImRead(pngFile, ImreadModes.Color);
          string anyColorModeInfo = $"channels:{anyColorMode.Channels()}, MatType: {anyColorMode.Type()}";
          var grayscaleMode = Cv2.ImRead(pngFile, ImreadModes.Grayscale);
          string grayscaleModeInfo = $"channels:{grayscaleMode.Channels()}, MatType: {grayscaleMode.Type()}";

          Cv2.ImShow("unchangedMode", unchangedMode);
          Cv2.ImShow("colorMode", colorMode);
          Cv2.ImShow("anyColorMode", anyColorMode);
          Cv2.ImShow("grayscaleMode", grayscaleMode);
          Cv2.WaitKey();
          Cv2.DestroyAllWindows();
      }

几种Mat读取方式的通道和数据类型结果:

unchangedModeInfo 输出: "channels:4, MatType: CV_8UC4"
colorModeInfo 输出: "channels:3, MatType: CV_8UC3"
anyColorModeInfo 输出:  "channels:3, MatType: CV_8UC3"
grayscaleModeInfo 输出: "channels:1, MatType: CV_8UC1"

图像显示截图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值