python中各种读取照片的库

python下关于读取照片的库

一 OpenCV: cv2.imread

OpenCV可以说是最强大的读取照片的函数库


图片读取操作

import cv2
import numpy as np

#读入图片:默认彩色图,cv2.IMREAD_GRAYSCALE灰度图,cv2.IMREAD_UNCHANGED包含alpha通道
img = cv2.imread('1.jpg')
cv2.imshow('src',img)
print(img.shape) # (h,w,c)
print(img.size) # 像素总数目
print(img.dtype)
print(img)
cv2.waitKey()

cv.imread()参数说明

| 第一个参数:指明图片的地址.图像应位于文件中,或者提供图片完整路径

| 第二个参数:是一个标志,指明读取图像的方式

cv2.IMREAD_COLOR: 默认,加载彩色图像,任何图像的透明度都将被忽略
cv2.IMERAD_GRAYSCALE: 以灰度模式加载图像
cv2.IMREAD_UNCHANGED:  加载图像,包括alpha通道

可以使用1 , 0 , -1来代替
例:

import cv2
import numpy as np

img = cv2.imread('1.png')

注意:路径错误,不会报错,只会打印路径none

值得注意的是,opencv读进来的图片已经是一个numpy矩阵了,彩色图片维度是(高度,宽度,通道数), 数据类型是uint8。


图片显示

cv2.imshow()
使用函数cv2.imshow()在窗口中显示图像。窗口自动适合图像大小。

第一个参数是一个窗口名称,它是一个字符串。
第二个论点是我们的形象。

可以根据需要创建任意数量的窗口,但使用不同的窗口名称。

cv2.waitKey()
cv2.waitKey()是一个键盘绑定函数。
它的参数是以毫秒为单位的时间。该函数等待任何键盘事件的指定毫秒。
如果在该时间内按任意键,程序将继续。如果为0,则无限期等待键击。
它也可以设置为检测特定的键击,如果按下键a等. 下文有讲解

注意 除了绑定键盘事件,此函数还处理许多其他GUI事件,因此必须使用它来实际显示图像。

cv2.destroyAllWindows()
cv2.destroyAllWindows()为窗口破坏函数,如果要销毁窗口,使用该函数.
参数为:窗口名称

cv2.namedWindow()
cv2.namedWindow():创建窗口
函数有两个参数

第一个参数为窗口名称,
第二个参数描述窗口是否可以调整大小
|cv2.WINDOW_AUTOSIZ,默认参数,窗口为自动设置,且无法调整大小
|cv2.WINDOW_NORMAL,则可以调整窗口大小

import cv2
import numpy as np

img = cv2.imread('1.png')
cv2.namedWindow('src' , cv2.WINDOW_NORMAL) #可调整窗口大小
cv2.imshow('src' , img)
print(img.size)#输出图片大小
cv2.waitKey(0)
cv2.destroyAllWindows()


照片写入

cv2.imwrite()
cv2.imwrite():来保存图像,有两个参数

第一个参数是文件名,第二个参数是要保存的图像。

import cv2
import numpy as np

img = cv2.imread('1.png', 1)

cv2.namedWindow('src' , cv2.WINDOW_NORMAL)
cv2.imshow('src' , img)
cv2.waitKey(0)

cv2.imwrite('1_2.png', img)# 保存

img2 = cv2.imread('1_2.png' , 0)
cv2.imshow('src' , img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

案例:
程序下方加载灰度图像,显示图像,如果按“s”并退出则保存图像,或者按ESC键直接退出而不保存。

import cv2

img = cv2.imread('1.png', 1)
cv2.imshow('src' , img)
k = cv2.waitKey(0) & 0xFF # 64位电脑需要这么写.
if k == 27:         # wait for ESC key to exit
    cv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exit
    cv2.imwrite('messigray.png',img)
    cv2.destroyAllWindows()
else: # other key 
    print("ok")


k = cv2.waitKey(0) & 0xFF
0x代表16进制,0xFF的二进制为1111 1111,猜测是Python中程序运行时cv2.waitKey(0) 返回值大于8位,因此& 0xFF取低8位,对应ascall表
参考:

猜你喜欢

转载自blog.csdn.net/qq_39129845/article/details/88095536
今日推荐