ʚʕ̯•͡˔•̯᷅ʔɞ
欢迎各路大佬来到小啾主页指点☀️欢迎大家前来学习OpenCV图像处理基本操作 - Open_CV系列博文,我是侯小啾。
✨博客主页:云雀编程小窝 ꧔ꦿ
꧔ꦿ博文如有帮助,还请给个点赞 + 关注 + 收藏✨
如有疑问欢迎随时在评论区交流。☀️
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
首先导入cv2模块
导入命令如下:
import cv2
再就是,准备一张名为pic的图片放在同目录下,如下(忽略水印):
然后读取并打印像素的数组:
image = cv2.imread("pic.jpg")
print(image)
# 读取图像,打印像素值数组
image = cv2.imread("D:/中文/pic.jpg")
print(image)
要将上边读取到的像素数组作为图像显示出来,需要以下三个方法结合使用:
cv2.imshow(winname,mat)
imshow方法用于显示图像,
imshow()方法显示的图像窗口,会在程序运行结束时,或使用destoryAllWindows()手动将窗口销毁为止 停止显示。
仅仅一个cv2.show()方法并不能满足我们对图像展示的需求。要想控制图像显示的时间,还需要使用到cv2.waitKet()和destoryAllWindows()方法。
cv2.waitKey(delay)
waitKey()用于控制图像显示的时间。
参数delay是一个数值,指延迟的时间。单位为毫秒。在这个时间内如果键盘被点击,则计时结束。否则就等到时间满足。
如果delay为0,则无限期地等待。直到键盘按键事件发生为止。
官方的解释:
函数waitKey无限期地等待一个key事件,或者等待dela毫秒,当它为正时。由于操作系统在切换线程之间有一个最小的时间间隔,该函数不会完全延迟毫秒,它将至少延迟毫秒,这取决于当时计算机上运行的其他程序。它返回按键的代码,如果在指定时间之前没有按键,则返回-1。要检查按键但不等待,请使用pollKey。
关于waitKey()与time.sleep()都有延时功能,
经过测试可以发现在这里使用time.sleep()的话,显示的只是窗口,而无图像。使用waitKet()才能显示图像。
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()的意义了。
OpenCV提供了专门的图像保存方法imwrite()
imwrite(filename,img)
import cv2
image = cv2.imread("pic.jpg")
cv2.imwrite("new_pic.jpg", image)
保存成功,执行结果可自行测试。
获取图像的属性,没有专门的方法,其实也就是查看像素数组的属性(即numpy数组的属性)。
只是当其应用于表示像素时,其具有了超出数组本身的意义。
常用的有
查看彩色图像的属性:
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)的二维数组。
本次分享就到这里,感谢大家的支持!