Opencv学习(1)--- 图像基本操作

数据读取–图片

读取

每一张图像的最小组成部分就是像素点,他是由很多个像素点组成的,每个像素点的范围是0-255,(0是黑色,亮度最暗,255是白色,亮度最亮)
RGB三色彩空间,一般的图片都是三通道的,可以把它看做是用一个三层矩阵表示,对应的不同像素点在三个颜色通道都会有一个对应的值

import cv2 as cv    #opencv读取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt
#想在绘图完成之后,直接生成,不需要调用show()
%matplotlib inline 
img = cv.imread('1.jpg')

读取参数是:图片名,会在当前目录下进行搜索
读取之后得到的结果是:一个三通道的numpy的数组形式

看形状:

img.shape

这是对应的结果:

(400, 400, 3)

注意:
1.形式是【h,w,c】的形式
2.Opencv和PIL对于三通道的读取顺序是有区别的。opencv读取的格式是BG,RPIL(python的图像处理库)是使用RGB打开

展示


#图像的显示,也可以创建多个窗口
cv.imshow('image',img)
#等待/消失时间,毫秒级,0表示任意键终止,不自动终止
cv.waitKey(0)
cv.destroyAllWindows()

在这里呢,有两个点要记:
1.cv.waitKey(0)
这里表示是图片的展示/消失时间,如果参数为0,那么表示按任意键自动退出,如果不为0,那么参数就是自己设定的时间,毫秒级别
2.cv.destroyAllWindows()
官方回答:
您可以调用destroyWindow()或destroyAllWindows()来关闭窗口并取消分配任何相关的内存使用。对于一个简单的程序,实际上不必调用这些函数,因为退出时操作系统会自动关闭应用程序的所有资源和窗口
通俗来讲也就是说:
如果之前没有释放掉内存的操作的话destroyallWIndows会释放掉被那个变量占用的内存

我们把整个图片展示的内容聚合成一个函数:

def cv_show(name,img):
    cv.imshow(name,img)
    cv.waitKey(0)
    cv.destroyAllWindows()

这样在之后的图片展示的时候,直接使用该函数即可

灰度化

img2 = cv.imread('1.jpg',cv.IMREAD_GRAYSCALE)
cv2 IMREAD_COLOR 彩色图像
cv2 IMREAD_GRAYSCALE 灰度图像

我们可以展示图片来观察一下图片的区别:
img是初始图片,他是三通道的彩色图片,而img2是经过灰度化处理的图片,他只有一个通道,只需要亮度来进行表达就行。
在这里插入图片描述
在这里插入图片描述
此时查看img2的shape

img2.shape

所得结果:

(400, 400)#只有[h,w],没有了c

保存

cv.imwrite('1_gray.jpg',img2)

看图片类型

cv.imwrite('1_gray.jpg',img2)

这个是结果:

numpy.ndarray

看图片像素点的个数

img.size

这个是结果:

480000

看图片对应矩阵每个值的范围

img.dtype

这个是结果:

dtype('uint8')

数据读取–视频

vc = cv.VideoCapture('1.mp4')
#检查是否打开正确
if vc.isOpened():
    open,frame = vc.read()
else:
    open = False
while open:
    #参数:ret:当前帧是否正确读入,frame:每一帧图像对应的三通道矩阵
    ret,frame = vc.read()
    if frame is None:
        break
    if ret == True:
        gray = cv.cvtColor(frame,cv.COLOR_BGR2GRAY)
        cv.imshow('result',gray)
        #可以设置让他等待多长时间,或者自动退出,可以设置关闭的按键,27对应的是退出键
        if cv.waitKey(10) % 0xFF == 27:
            break
vc.release
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值