这个分类记录自己学习opencv的随笔文档,方便以后查询和复习。python-opencv环境配置网上教程很多,此处就不做赘述了,该文档记录opencv最基础的图像读写和显示,工具是jupyter notebook。

1 opencv中,图像读取函数是 imread(filename, flags=None)

参数说明:

filename:读取图像的路径,通常支持jpg、png、bmp、tiff等格式文件。

flags:图片读入的模式,模式定义在cv::ImreadModels中,默认值为IMREAD_COLOR。还有一个常用的模式是:IMREAD_GRAYSCALE,对应值为 0,以灰度图方式读取图片。

注意:imread函数返回一个BGR形式的图像对象,其类型为一个numpy数组。

2 显示图像的函数是 imshow(window_name, image)   

参数说明:window_name是一个字符串,代表要在其中显示图像的窗口的名称。image是它是要显示的图像。

可以用 namedWindow(window_name, flag) 来定义一个窗口,如果没有定义会根据 imshow 的参数自动生成一个窗口。已经定义的窗口可以用 resizeWindow(window_name,width,height) 来改变窗口大小。

import cv2
import numpy as np img=cv2.imread('C:/Users/86188/Desktop/test/python/cat.jpg',cv2.IMREAD_COLOR) #读取图片

cv2.imshow('showimg',img) #显示图片
cv2.waitKey(0) #等待用户操作
cv2.destroyWindow('window') #销毁窗口

3  除了直接用opencv的imshow来显示图片,也可以用matplotlib来显示图片

注意需要在显示的时候进行图片通道翻转(直接用::-1,也可以用cvtColor()函数进行颜色通道翻转),否则显示的图片颜色会异常,因为正常图片的格式是RGB,但是opencv读取进来的格式是BGR。

         

用opencv来显示图像通常需要好几行代码,可以自己封装成函数,需要的时候直接调用:

       

4 opencv中图像的属性

在 OpenCV 中,图像是一个 NumPy 数组,我们可以使用numpy数组的属性来访问图像属性:

  • 图像类型 - 图像的数据结构。OpenCV中的图像是numpy.ndarray,我们可以将其访问为 type(img) 。
  • 图像形状 - 它是以 [H, W, C] 格式表示的形状。其中 H,W 和 C 分别是图像的 高度,宽度和通道数 ,我们可以将其访问为 img.shape 。

  • 图像大小 - 它是图像中像素的总数。它也是数组中元素的总数。我们可以将其访问为 img.size 。

  • 数据类型 - 它是图像数组元素的dtype。我们可以将其访问为 img.dtype 。

5 图片保存 imwrite(filename,img) 

参数说明: filename 表示保存的文件名称,img 是需要保存的图像对象。

创建窗口,读取显示和保存图像的实例如下:

import cv2

#创建窗口
cv2.namedWindow('img',cv2.WINDOW_NORMAL)
cv2.resizeWindow('img',640,480) #读取图片
img = cv2.imread('./cat.jpg') while True:
cv2.imshow('img',img)
key = cv2.waitKey(0) #该函数的返回值为ASCLL码,参数0表示:等待 0 毫秒后,用户可以通过按键盘上的任意键来销毁所有窗口。 if key == ord('q'): #如果键盘输入q,退出
break
elif key == ord('s'): #如果键盘输入s,保存图片到 当前文件夹下
cv2.imwrite('./mycat.png',img)
else:
print(key) cv2.destroyAllWindows() #销毁当前所有窗口

 此外,opencv中也可以进行多幅图像的读取,函数是 imreadmulti(filename) 参数filename是待读取的图像文件路径,返回的结果是tuple类型,包含两个值,第一个为bool类型,表示是否读取成功;第二个参数是list类型,保存读取的图像结果。多幅图像保存可以用imwritemulti(filename,img) .参数filename表示保存的图像文件名称,img是图像数据。

1 opencv-python图像读写模块的更多相关文章

  1. opencv 批量图像读写

    处理图像数据集时通常要读写整个文件夹里的图像,这时就会用的图像的批量读写. 比较常用的方法就是生成一个包含所有图像的txt列表 生成txt文件的方法如下: 利用cmd进入dos 利用路径进入指定文件夹 ...

  2. opencv python 图像二值化/简单阈值化/大津阈值法

    pip install matplotlib 1简单的阈值化 cv2.threshold第一个参数是源图像,它应该是灰度图像. 第二个参数是用于对像素值进行分类的阈值, 第三个参数是maxVal,它表 ...

  3. Python图像读写方法对比

    训练视觉相关的神经网络模型时,总是要用到图像的读写.方法有很多,比如matplotlib.cv2.PIL等.下面比较几种读写方式,旨在选出一个最快的方式,提升训练速度. 实验标准 因为训练使用的框架是 ...

  4. 11、OpenCV Python 图像金字塔

    __author__ = "WSX" import cv2 as cv import numpy as np # 高斯金字塔 #金字塔 原理 ==> 高斯模糊+ 降采样 #金 ...

  5. 10、OpenCV Python 图像二值化

    __author__ = "WSX" import cv2 as cv import numpy as np #-----------二值化(黑0和白 255)---------- ...

  6. 8、OpenCV Python 图像直方图

    __author__ = "WSX" import cv2 as cv import numpy as np from matplotlib import pyplot as pl ...

  7. 1、OpenCV Python 图像加载和保存

    __author__ = "WSX" import cv2 as cv # 这里的文件是图片或者视频 def Save_File( image ): cv.imwrite(&quo ...

  8. 12、OpenCV Python 图像梯度

    __author__ = "WSX" import cv2 as cv import numpy as np def lapalian_demo(image): #拉普拉斯算子 # ...

  9. 2、OpenCV Python 图像属性获取

    __author__ = "WSX" import cv2 as cv import numpy as np image = cv.imread("1.JPG" ...

  10. Python 利用pytesser模块识别图像文字

    使用的是python的pytesser模块,原先想做的是图片中文识别,搞了一段时间了,在中文的识别上还是有很多问题,这里做记录分享. pytesser,OCR in Python using the ...

随机推荐

  1. [Linux]./configure | make | make install的工作过程与原理

    经常使用的Linux编译/安装命令,有必要了解一下原理了. step1 ./configure 配置与编译前检查 通常由软件开发商编写一个检测程序(configure或config)来检测用户的操作环 ...

  2. 当前标识(IIS APPPOOL\derl)没有对“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files”的写访问权限。

    解决方法:运行cmd 执行以下指令 1.检查用户组,找到iis相关的用户组, 2.将电脑登录用户添加到该组 3.为指定的用户或用户组授予权限,使其可以访问 IIS 元数据库和 ASP.NET 使用的其 ...

  3. DES算法图解、密码学

  4. Redis - 数据类型映射底层结构

    简介 从数据类型上体现就是,同一个数据类型,在不同的情况下会使用不同的编码类型,底层所使用的的数据结构也不相同. 字符串对象 字符串对象的编码可以是 int.raw 和 embstr 三者之一. em ...

  5. javasec(一)java反射

    这篇文章介绍javasec基础知识--java反射. 0x01 反射是什么? 反射是一种机制,利用反射机制动态的实例化对象.读写属性.调用方法.构造函数. 在程序运行状态中,对于任意一个类或对象,都能 ...

  6. 可视化大屏:mapbox+vue全攻略

    如题图,mapbox是一个支持真3D地形展示的webGIS框架,与常用的Leaflet.Cesium和Openlayers并称四大框架,本文将介绍mapbox-gl js 在 vue 中的用法. 为什 ...

  7. [Pytorch框架] 2.3 神经网络简介

    文章目录 2.3 神经网络简介 概述 神经网络的表示 激活函数 为什么激活函数都是非线性的 sigmod 函数 tanh 函数 ReLU 函数 Leaky Relu 函数 深入理解前向传播和反向传播 ...

  8. Java中数字相关的类有哪些?Nuber数字类和Math数学类详解

    前言 我们在解决实际问题时,会经常对数字.日期和系统设置进行处理,比如在我们的代码中,经常会遇到一些数字&数学问题.随机数问题.日期问题和系统设置问题等. 为了解决这些问题,Java给我们提供 ...

  9. JavaScript 如何判断一个对象中是否有某个属性?

    今天讲讲,JavaScript 如何判断一个对象中是否有某个属性? 我总结了5个方法: 方法1: if(Obj[a]) {} 缺点:对于参数值为 undefined 和 0 的无效. 方法2: if( ...

  10. 2022-09-15:Range模块是跟踪数字范围的模块。 设计一个数据结构来跟踪表示为 半开区间 的范围并查询它们。 半开区间 [left, right) 表示所有 left <= x < righ

    2022-09-15:Range模块是跟踪数字范围的模块. 设计一个数据结构来跟踪表示为 半开区间 的范围并查询它们. 半开区间 [left, right) 表示所有 left <= x < ...