文章目录

1.安装OpenCV-Contrib-Python库2.读取图片文件像素值数组3.显示图像①cv2.imshow()②cv2.waitKey()③cv.destoryAllWindows()

4. 保存图像 imwrite()5.获取图像的属性

ʚʕ̯•͡˔•̯᷅ʔɞ 欢迎各路大佬来到小啾主页指点☀️欢迎大家前来学习OpenCV图像处理基本操作 - Open_CV系列博文,我是侯小啾。 ✨博客主页:云雀编程小窝 ꧔ꦿ ꧔ꦿ博文如有帮助,还请给个点赞 + 关注 + 收藏✨              如有疑问欢迎随时在评论区交流。☀️

1.安装OpenCV-Contrib-Python库

OpenCV-Contrib-Python除了包含我们使用的OpenCV相关功能外,还包含了Numpy。

直接安装

pip install opencv-contrib-python

从清华镜像安装OpenCV-Contrib-Python库

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-contrib-python

2.读取图片文件像素值数组

首先导入cv2模块 导入命令如下:

import cv2

再就是,准备一张名为pic的图片放在同目录下,如下(忽略水印):

     

然后读取并打印像素的数组:

image = cv2.imread("pic.jpg")

print(image)

           

需要注意的是,如果指定路径,这里的路径中不能有中文,否则会读不到数据,产生警告。如下所示:

# 读取图像,打印像素值数组

image = cv2.imread("D:/中文/pic.jpg")

print(image)

3.显示图像

要将上边读取到的像素数组作为图像显示出来,需要以下三个方法结合使用:

①cv2.imshow()

cv2.imshow(winname,mat)

imshow方法用于显示图像,

其中参数winname表示显示图像的窗口的名称,是一个字符串,且不能有中文。ma参数t即 一个 像素数组对象。

imshow()方法显示的图像窗口,会在程序运行结束时,或使用destoryAllWindows()手动将窗口销毁为止 停止显示。 仅仅一个cv2.show()方法并不能满足我们对图像展示的需求。要想控制图像显示的时间,还需要使用到cv2.waitKet()和destoryAllWindows()方法。

②cv2.waitKey()

cv2.waitKey(delay)

waitKey()用于控制图像显示的时间。

参数delay是一个数值,指延迟的时间。单位为毫秒。在这个时间内如果键盘被点击,则计时结束。否则就等到时间满足。 如果delay为0,则无限期地等待。直到键盘按键事件发生为止。 官方的解释: 函数waitKey无限期地等待一个key事件,或者等待dela毫秒,当它为正时。由于操作系统在切换线程之间有一个最小的时间间隔,该函数不会完全延迟毫秒,它将至少延迟毫秒,这取决于当时计算机上运行的其他程序。它返回按键的代码,如果在指定时间之前没有按键,则返回-1。要检查按键但不等待,请使用pollKey。

关于waitKey()与time.sleep()都有延时功能, 经过测试可以发现在这里使用time.sleep()的话,显示的只是窗口,而无图像。使用waitKet()才能显示图像。

③cv.destoryAllWindows()

cv.destoryAllWindows() cv.destoryAllWindows()用于关闭当前程序显示的所有窗口。(当然,不包括咱的pycharm窗口)

import cv2

image = cv2.imread("pic.jpg")

cv2.imshow("cat", image) # 窗口名为“cat”

cv2.waitKey(10000) # 延迟10000毫秒(1秒=1000毫秒。也即10秒)

cv2.destroyAllWindows() # 销毁窗口

      如果没有cv2.destroyAllWindows()窗口销毁命令,窗口似乎也会自动销毁。 这是因为没有该命令是,则窗口会在程序运行结束时自动销毁。 在这个例子中感觉不到细微差别,cv2.destroyAllWindows()显得可有可无。 如果把cv2.destroyAllWindows()去掉,换为time.sleep(),则窗口会在显示cv2.waitKey(10000)的10秒后,继续等待后续程序time.sleep()执行完毕(10秒),总计约20秒。这样就便于理解cv2.destroyAllWindows()的意义了。

4. 保存图像 imwrite()

OpenCV提供了专门的图像保存方法imwrite()

imwrite(filename,img)

filename为保存文件目录img为像 素数组对象

import cv2

image = cv2.imread("pic.jpg")

cv2.imwrite("new_pic.jpg", image)

保存成功,执行结果可自行测试。

5.获取图像的属性

获取图像的属性,没有专门的方法,其实也就是查看像素数组的属性(即numpy数组的属性)。

只是当其应用于表示像素时,其具有了超出数组本身的意义。

常用的有

shape,彩色图像的数组是一个三维数组,可以表示为(a,b,3)。a表示竖直方向上的像素通道数量(垂直像素),b表示水平方向上的像素通道数量(水平像素),3表示每个像素有三个色彩通道。 灰度图像的像素数组是一个二维数组(a,b),a表示垂直像素,b表示水平像素。灰度图像的每个像素有一个色彩通道。size,表示图片具有的色彩通道个数。 对彩色图像,像素数量为a×b,色彩通道个数为a×b×3。 对灰度图像,像素数量和色彩通道数都为a×b。dtype,图像数据类型,为unit类型(非负类型)。

查看彩色图像的属性:

import cv2

image = cv2.imread("pic.jpg")

print("shape =", image.shape)

print("size =", image.size)

print("dtype =", image.dtype)

如图,可以看出是一个shape为(700,700,3)的三维数组。

查看灰度图像的属性

image = cv2.imread("pic.jpg", 0)

print("shape =", image.shape)

print("size =", image.size)

print("dtype =", image.dtype)

如图,可以看出是一个shape为(700,700)的二维数组。

本次分享就到这里,感谢大家的支持!

꧔ꦿ本系列blog传送门:   ✨OpenCV图像处理基本操作 【Python-Open_CV系列(一)】   ✨OpenCV像素处理基本操作 【Python-Open_CV系列(二)】   ✨OpenCV之 BGR、GRAY、HSV色彩空间&色彩通道专题 【Python-Open_CV系列(三)】   ✨OpenCV绘制图像与文字(可作为脚手架代码)(python) 【Python-Open_CV系列(四)】   ✨OpenCV图像几何变换专题(缩放、翻转、仿射变换及透视)【python-Open_CV系列(五)】   ✨基于梵·高《向日葵》的 图像阈值处理专题(二值处理、反二值处理、截断处理、自适应处理及Otsu方法)【Python-Open_CV系列(六)】   ✨OpenCV基本功 之 图像的掩模、运算 & 合并专题 -小啾带学【Python-Open_CV系列(七)】   ✨《三英战吕布》 - 图像模板匹配 【Python-Open_CV系列(八)】   ✨OpenCV滤波器 龙门石窟篇【Python-Open_CV系列(九)】(均值滤波器、中值滤波器、高斯滤波器、双边滤波器)   ✨Open_CV形态学运算专题 (腐蚀&膨胀、开&闭运算、梯度运算、顶帽运算黑帽运算 )【Python-Open_CV系列(十)】   ✨霍夫变换看不懂?小啾带你串一遍:OpenCV图形检测专题 这样学最简单【Python-Open_CV系列(十一)】   ✨小啾带你开天眼 之 开启py-OpenCV摄像头及视频处理【Python-Open_CV系列(十二)】   ✨小啾带你开天眼 之 人脸检测与识别(以及华强、皇叔、高祖配墨镜特效)【Python-Open_CV系列(十三)】

精彩内容

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: