opencv学习之图像基本操作

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

传统视觉–opencv的学习(一)


一、opencv使用时需安装的库

opencv-python库,numpy库,matplotlib库

二、关于图像的基本操作

1. 引入库

代码如下(示例):

import numpy as np
import cv2
import matplotlib.pyplot as plt

2. 读入图片

代码如下(示例):

import numpy as np
import cv2
im = cv2.imread('./sample.jpg',0)

cv2.imread(图像路径,读取图像的方式)
读进来的格式是BGR格式
读取图像的方式:

  • cv.IMREAD_COLOR: 1 加载彩色图像。任何图像的透明度都会被忽视。它是默认标志。
  • cv.IMREAD_GRAYSCALE: 0 以灰度模式加载图像
  • cv.IMREAD_UNCHANGED: -1 加载图像,包括alpha通道

3. 显示图像

cv2.imshow('Display',im)

参数:
1. 窗口的名称,用字符串表示
2. 加载好的图片名称

注意:
在使用cv2.imshow()之后,务必后面添上 cv2.waitKey() 来设定图像窗口的显示时长

3.1 图像单窗口显示

# 在窗口 Display1 中显示im1
cv2.imshow('Display1',im1)
# 在窗口 Display2 中显示im2
cv2.imshow('Display2',im2)
# waitKey(0)表示程序会无限制的等待用户的按键事件
cv2.waitKey(0)

3.2 按指定大小的窗口显示图像

cv2.namedWindow("Demo", cv2.WINDOW_NORMAL) # 创建窗口
cv2.resizeWindow("Demo", 400, 300) # 先宽后高
cv2.imshow("Demo", img1)  
cv2.waitKey(0)  

3.3 使用plt在同一窗口显示多张图片

N = 2
M = 2
# 表示画布的尺寸为N*M,可放置N*M个图像
for i in range(4):
	plt.subplot(N, M, i+1) # 表示第i张图片,下标只能从1开始
	plt.title("im1") #图像名称,该行可省略
	plt.imshow(im) # 要显示的图片
	plt.xticks([]), plt.yticks([])  # 隐藏 x 轴和 y 轴上的刻度值
plt.show()

注意:

  • opencv读入的图片是BGR格式,但plt.imshow()展示的RGB格式,需要进行格式转化。如果是单通道格式则不需要转换
    im = cv2.cvtColor(im, cv.COLOR_BGR2RGB)
    

4.保存图像

cv2.imwrite('./street1.jpg',im)

参数:

  1. 保存的路径
  2. 要保存的图片

5. 图像通道的拆分和合并

b,g,r=cv2.split(bgr_image)
bgr = cv2.merge([b, g, r]) # 按B→G→R的顺序合并通道

说明:

  • b,g,r分别为单通道图像
  • 如果图像偏蓝,则b通道值偏大,故b图像偏白

使用opencv展示单通道图片,会呈现灰度图

import cv2 as cv
image = cv.imread("./street.jpg")
image = cv2.resize(image,(-1,-1),None, fx= 0.2, fy=0.2)
b,g,r = cv.split(image) #将图像数据拆分成三份
cv.imshow("bgr_image",image)
cv.imshow("blue",b)
cv.imshow("green",g)
cv.imshow("red",r)
# 单通道图片用cv2.imshow()展示时三个通道的值会变得相同,从而呈现灰度图
cv.waitKey(0)

cv2.imshow

6. 图像属性的获取

6.1 获取图像的shape

print("image_shape",image.shape)

注:

  • .shape返回一个元组包含三个值,分别是高度,宽度和通道数,如果通道数为1,则第三个值省略,如下分别为彩色图和灰度图的输出的结果
image_shape (317, 480, 3)   # 图片为彩色时
image_shape (317, 480)  # 图片为灰度图时

6.2 获取图像的size

print("image_size",image.size)

注:

  • .size返回的是一个值(图像包含的像素个数):该值等于水平像素×垂直像素×通道数
image_size 456480 # 图片为彩色时
image_size 152160 # 图片为灰度图时
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值