判断自己pytorch虚拟环境是否安装了 cv2 可以使用 pip list
1
.读取图像:imread()
imread()方法 第一个参数 传入图像文件的路径,读取成功返回值为 numpy()类型的数组。
获取图像失败 不会抛异常,而是得到一个None
import cv2
img = cv2.imread('图像的路径')
print('type(img)',img)
#返回值numpy数组
第二个参数 有3种模式
cv2.IMREAD_COLOR 缺省方式,读取图像为BGR 8-bit 格式. 这里需要注意opencv默认通道为BGR模式
cv2.IMREAD_UNCHANGED 图像格式不做任何改变,可用在读取带alpha通道的图片
cv2.IMREAD_GRAYSCALE 读取图像为转换为灰度图
import cv2
img = cv2.imread('图像路径',cv2.IMREAD_UNCHANGED)
print(img.shape)
(512,512,3)
注:图像的宽度是width = cols = img.shape[1]
;图像的高度为height = rows = img.shape[0]
2
显示图像 imshow()
imshow()
用来显示图片,第一个参数为显示窗口的名称,第二个参数是imread()
等方法生成的图像实例
waitKey()
传入的参数如果为0,会无限等待直到任何按键按下,或者传入其他数值参数表示等待时长,单位为ms,时长结束后显示图像窗口会关闭。
import sys
import cv2
img = cv2.imread('图片路径',cv2.IMREAD_UNCHANGED)
if img is None:
print('没有读入图像')
sys.exit(-1)#异常终止,退出程序
cv2.imshow('名称',img)
cv2.waitKey(1000)
调整窗口
可以使用nameWindow()
, resizeWindow()
nameWindow(窗口名称,cv2.WINDOW_NORMAL)
命名窗口
resizeWindow(窗口名称,窗口宽度,窗口高度)
缩放窗口
rows,cols = img.shape[0],img.shape[1]
cv2.namedWindow('lena-down', cv2.WINDOW_NORMAL)
cv2.resizeWindow('lena-down',(int(cols*0.5),int(rows*0.5)))
cv2.imshow('lena-down',img)
cv2.namedWindow('lena-up', cv2.WINDOW_NORMAL)
cv2.resizeWindow('lena-up',(int(cols*1.3),int(rows*1.3)))
cv2.imshow('lena-up',img)
销毁窗口
cv2.waitKey(0)
cv2.destroyWindow('窗口名称') #关闭单个窗口
cv2.waitKey(0)
cv2.destroyAllWindows() #关闭所有显示窗口
简单的一个显示图像封装
dbg_is_show = False
def show_img(win_name,img,wait_time=0,img_ratio=0.15,is_show=True):
if is_show is not True:
return
rows = img.shape[0]
cols = img.shape[1]
cv2.namedWindow(win_name, cv2.WINDOW_NORMAL )#cv2.WINDOW_AUTOSIZE)
cv2.resizeWindow(win_name,(int(cols*img_ratio),int(rows*img_ratio)))
#这里先是图像的宽度,宽度是cols = img.shape[1]
cv2.imshow(win_name,img)
cv2.waitKey(wait_time)
3.
写入图片 imwrite()
imwrite()
第1个参数是写入的文件名称,文件名称的后缀**决定了图片文件的格式,第2个参数为图像实例。
cv2.imwrite('lena.bmp',img)
cv2.imwrite('lena.png',img)
#将imread()读出的图像实例分别写入为bmp和jpg格式的文件
4.
cv2读出的数据直接用matplotlib显示,会导致颜色错乱,原因是cv2读出的数据是按照BGR格式组织的,而matplotlib显示图像需要按照RGB格式组织,所以需要将读出的numpy数据进行转换:
import numpy as np
import matplotlib.pyplot as plt
import cv2
img = cv2.imread('lena.jpg') #opencv读取文件图片
print('type(img):',type(img))
print(img.shape)
img2=img.copy()
img2[:,:,2]=img[:,:,0]
img2[:,:,0]=img[:,:,2]
plt.imshow(img2) #imshow
plt.show()