Python图片读写方式之OpenCV

(一)使用OpenCV加载图片

1.导入OpenCV模块

import cv2  ## 导入OpenCV库

2.加载图片

cv2.imread(filename,[flags])

  • filename:图片的路径,即使路径错误也不会报错,但打印返回的图片对象为None
  • flags:cv2.IMREAD_COLOR,读取彩色图片,图片透明性会被忽略,为默认参数,也可以传入1;
    cv2.IMREAD_GRAYSCALE,按灰度模式读取图像,也可以传入0
    cv2.IMREAD_UNCHANGED,读取图像,包括其alpha通道,也可以传入-1
img_ty = cv2.imread('ty.jpg',1)  ## 加载图片名称为ty.jpg的彩色图片

(二)查看图片信息

1.查看图片性质

  • img.shape :输出图片的形状,图片的形状指的是一个NumPy数组。若该图片是一个彩色图片,则输出一个三维数组,(高度,宽度,通道数);若为黑白图片,则输出一个二维数组,(高度,宽度)
  • img.size:返回所有像素数量,=高度宽度通道数。
  • img.dtype:返回数组类型。
import cv2
img_ty = cv2.imread('ty.jpy')
## 输出图片的形状
print(img_ty.shape)  ## 输出ty.jpg图片的大小
##Out[1]: (854, 740, 3)
print(img_ty.size)
##Out[2]: 1895880
print(img_ty.dtype)
##Out[3]: uint8

2.获取和编辑图像像素

(1)获取图像像素
## 1.切片
pixel = img[100,100]  ## 获取(100,100)处的像素值
print(pixel)
##Out[1]: [ 70 176 230]

b = img_ty[100,100,0]  ## 获取(100,100)处,blue通道像素值
print(b)
##Out[2]: 70

## 2.item
r = img_ty.item(100,100,2)
print(r)
##Out[3]: 230
(2)编辑图像像素
## 1.切片
img_ty[100,100,2] = 99  ## 设置red通道值
print(img_ty[100,100])
##Out[1]: [ 70 176  99]

## 2.itemset
img_ty.itemset((100,100,1),99)
print(img_ty[100,100])
##Out[2]: [ 70 99  99]
(3) 图片截取
## 1.通道截取
b = img_ty[:,:,0]  #截取整个蓝色通道
b,g,r = cv2.split(img) ## 截取三个通道,比较耗时
img = cv2.merge((b,g,r))  ## 通道合并

## 2.区域截取
roi = img[100:200,300:400]  ## 截取100行到200行,列为300到400列的整块区域
img[50:150,200:300] = roi   ## 将截取的roi移动到该区域 (50到100行,200到300列)

(三)显示图片

1.cv2.imshow(winname, mat)

第一个参数表示输出窗口的窗口名称,第二个参数表示要显示的图像。
注:可以创建任意数量的窗口,但必须使用不同的窗口名称。

2.cv2.waitKey([, delay])

  • waitKey控制着imshow的持续时间,当imshow之后不跟waitkey时,相当于没有给imshow提供时间展示图像,所以有一个空窗口一闪而过或者出现未响应情况。
  • cv2.waitKey()是一个键盘绑定函数。它的时间量度是毫秒ms。函数会等待(n)里面的n毫秒,看是否有键盘输入。若有键盘输入,则返回按键的ASCII值。没有键盘输入,则返回-1.一般设置为0,他将无限等待键盘的输入。

3.cv2.destroyAllWindows()

cv2.destroyAllWindows() 用来删除所有窗口
cv2.destroyWindow(winname):删除特定的窗口

cv2.imshow('ty',img_ty)  ## 在一个名为ty的窗口显示图片ty.jpg
cv2.waitKey(0)  ## 让窗口持续显示
cv2.destroyAllWindows()  ## 删除窗口
## cv2.destroyWindow('ty') 

(四)调整图像大小

cv2.resize(InputArray src, OutputArray dst, Size, fx, fy, interpolation)
参数解释:

参数解释
InputArray src输入图片
OutputArray dst输出图片
Size输出图片尺寸**(宽,高)**
fx, fy沿x轴,y轴的缩放系数
interpolation插入方式

interpolation 选项所用的插值方法:

插值方法解释
INTER_NEAREST最近邻插值
INTER_LINEAR双线性插值(默认设置)
INTER_AREA使用像素区域关系进行重采样
INTER_CUBIC4x4像素邻域的双三次插值
INTER_LANCZOS48x8像素邻域的Lanczos插值

(五)图片保存

cv2.imwrite(img_path_name,img):第一个参数为保存的文件名,第二个参数为文件对象。

(六)实例

import cv2

img_ty = cv2.imread('ty.jpg',1)

## 将图片高和宽分别赋值给x,y
x,y = img_ty.shape[0:2]

## 如果输出空格则关闭ty1窗口
cv2.imshow('ty1',img_ty)
dt = cv2.waitKey(0)
if dt == 32:  
    cv2.destroyWindow('ty1')

## 缩放到原来的二分之一,输出尺寸格式为(宽,高)
img_ty2 = cv2.resize(img_ty, (int(y / 2), int(x / 2)))
cv2.imshow('ty2', img_ty2)
cv2.waitKey(0)

# 缩放到原来的四分之一
img_ty3 = cv2.resize(img_ty, (0, 0), fx=0.25, fy=0.25, interpolation=cv2.INTER_NEAREST)
cv2.imshow('ty3', img_ty3)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imwrite('ty_copy.jpg',img_ty)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值