• Python-OpenCV读取与保存图片


    1. OpenCV读取图片

    1.1 简述

      OpenCV读取图片的方法是cv2.imread(),读取出来图片的格式是BGR与常规的彩色图像的格式(RGB)相反,这一点一定要注意。

      OpenCV显示图片的方法是cv2.imshow(),显示的格式是BGR。

      小生就言于此O(∩_∩)O哈哈~,直接上例子。

    1.2 例子

    1.2.1 Code

     1 import cv2
     2 
     3 
     4 def cv2_imread():
     5     # 图片路径,相对路径
     6     image_path = "./fusion_datasets/1.jpg"
     7     # 读取图片,格式为BGR
     8     image = cv2.imread(image_path)
     9     # 显示图片形状
    10     print("image_shape: ", image.shape)
    11     # 缩放图片
    12     width = int(image.shape[0] / 2)
    13     height = int(image.shape[1] / 2)
    14     image = cv2.resize(image, (height, width), interpolation=cv2.INTER_CUBIC)
    15     # 显示图片
    16     cv2.imshow('girl', image)
    17     cv2.waitKey(0)
    18     cv2.destroyAllWindows()
    19 
    20 
    21 if __name__ == '__main__':
    22     cv2_imread()

    1.2.2 结果显示

    2. OpenCV保存图片

    2.1 简述

       OpenCV保存图片用cv.imwrite(filename, img),filename为保存的路径名称,img为要保存的图片。

      但实际应用中不会这么简单,(*^▽^*)我掐指一算,绝了O(∩_∩)O哈哈~,路过的宝宝们大多数的是想将tensor(tensor先转为numpy)或numpy转为cv2保存为图片。

      需要注意如下几点:

        1. cv2保存的共三个维度(高,宽,通道)。

        2. 保存的图片格式也是BGR。

        3. 将numpy转为np.uint8格式

    2.2 例子

    2.2.1 Code

     1 import cv2
     2 import numpy as np
     3 import torchvision.transforms as transforms
     4 
     5 
     6 def cv2_imwrite():
     7     # =============== 模拟图片为tensor数据 ============ #
     8     # 图片路径,相对路径
     9     image_path = "./fusion_datasets/1.jpg"
    10     # 读取图片, 图片格式为(height, width, channel)
    11     image = cv2.imread(image_path)
    12     # 图像转为tensor,此时图片变为(channel, height, width),并将0-255归一化为0-, 减小计算
    13     input_transform = transforms.Compose([
    14         transforms.ToTensor(),
    15     ])
    16     # unsqueeze(0):是在扩展维度由三维扩展为4维,(bathch_size, channel, height, width)
    17     # 这是实际实验中可能遇到,所以我才扩展维度的,也可以不扩展
    18     image = input_transform(image).unsqueeze(0)
    19 
    20     # =============== 数据准备完成,开始保存 ============ #
    21     # 1.首先将tensor降维度,4维降为3维:image.squeeze(0)
    22     # 2.tensor转为numpy:image.squeeze(0).numpy()
    23     # 3.转换维度,由(channel, height, width)变为(height, width, channel)
    24     # 4.数据类型由numpy转换维np.uint8(这是图片应有的格式)
    25     # 5.保存图片,执行函数cv2.imwrite(filename, img),filename:保存路径名要, img:保存的图片
    26     image = np.transpose(image.squeeze(0).numpy() * 255.0, (1, 2, 0)).astype(np.uint8)
    27     cv2.imwrite("./results/" + "girl.jpg", image)
    28 
    29 
    30 if __name__ == '__main__':
    31     cv2_imwrite()

    2.2.2 结果显示

      图片已保存~~

             

        打开图片查看~~,哇哦,so beautiful(*^▽^*)!

       

     3. 总结

      努力去爱周围的每一个人,付出,不一定有收获,但是不付出就一定没有收获! 给街头卖艺的人零钱,不和深夜还在摆摊的小贩讨价还价。愿我的博客对你有所帮助(*^▽^*)(*^▽^*)!

  • 相关阅读:
    redis是什么?
    mysql用户权限设置
    大白话说Java反射:入门、使用、原理 (转)
    iptables只允许指定ip访问本机的指定端口
    CSS系列——前端进阶之路:初涉Less
    MySQL分页查询优化
    linux 面试题
    CSS中定义CLASS时,中间有空格和没空格的区别是什么?
    MySQL Explain详解
    EBS 系统当前完成请求时间监测
  • 原文地址:https://www.cnblogs.com/haifwu/p/12846774.html
Copyright © 2020-2023  润新知