open-cv 中读取,显示,写入图像

判断自己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)

5125123

注:图像的宽度是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()

猜你喜欢

转载自blog.csdn.net/aqiangdeba/article/details/129748902
今日推荐