Python_08OpenCV图像处理

2020/08/01

hon_OpenCV图像处理)

1、什么是图像?

图像就是结构化存储的数据信息;图像属性(通道数目,高与宽,像素数据,图像类型)

2、什么是OpenCV?

Python中加载图像的模块与API;支持常见格式

3、如何加载和显示图像?

(1)读取图片

在这里插入图片描述

图3.1

(2)加载图片属性

在这里插入图片描述

图3.2.1

在这里插入图片描述

图3.2.2

运行结果:
在这里插入图片描述

图3.2.3

(3)加载视频

在这里插入图片描述

图3.3

★注意:opencv读视频时是分析视频的内容,对视频每一帧进行处理,对内容进行视频分析对象检测对象跟踪,所有opencv对的视频都是没有声音的,且对视频大小有一定的限制

(4)保存图片和视频

在这里插入图片描述

图3.4

4、numpy

见文档

5、如何处理图像每一个像素点?

(1)如何读取图像的属性?

图5-1

图5.1.1

运行结果:
在这里插入图片描述

图5.1.2

(2)如何循环获取每一个像素点并进行修改,再重新赋回去并显示处理?

在图5.1.1的第12行代码后面加上一下代码,如图5.2.1所示
在这里插入图片描述

图5.2
    for row in range(height):               #遍历数组
        for col in range (width):
            for c in range(channels):
                pv = image[row,col,c]       #获取每个通道的每个数值,c维数组
                image[row,col,c] = 255 - pv #255减去 高、宽、维度,得到新的
    cv.imshow("pixels_demo",image)          #显示图片,pixels_demo是窗口名,image是图片

图5.2代码

利用OpenCV的API实现图像取反,可以大大缩短程序运行时间,实现代码如下所示

def inverse(image):
    dst = cv.bitwise_not(image)
    cv.imshow("pixels_demo", image)

(3)如何预估循环获取每一个像素点CPU运行的时间?

在图5.1.1的第17行代码后面加上一下代码,如图5.3所示
在这里插入图片描述

图5.3
t1 = cv.getTickCount()      #getTickCount获取CPU所有时间的总数
access_pixels(src)          #调用
t2 = cv.getTickCount()      #getTickCount获取CPU所有时间的总数
time = ((t2-t1)/cv.getTickFrequency())#t2-t1除以每一秒钟的数量,得到总的秒数
print("time : %s ms" % (time*1000))   #总的秒数*1000得毫秒数,并打印输出

图5.3代码

6、如何自己创建一个新的图像?

(1)创建多通道的图像

在这里插入图片描述

图6.1
def create_image():
    """"
    多通道
    一般就是RGB图像
    """
    img = np.zeros([400,400,3],np.uint8)    #创建一个三通道的高和宽都是4003通道,类型是np.uint8(八位的)
    #img[:, :, 0] = np.ones([400, 400] * 255)     #修改第0个通道的值;ones跟大小一样相当于都是0,相当于是第0个通道了蓝色;
    #img[:, :, 1] = np.ones([400, 400] * 255)     # 如果是1就是绿色;前面必须默认是整个的
    img[:, :, 2] = np.ones([400, 400] * 255)     # 如果是2就是红色;
    cv.imshow("new.image",img)                   #显示出来

图6.1代码

(2)创建单通道的图像

在这里插入图片描述

图6.2
def create_image():
	"""
    单通道
    最常见的单通道就是灰度图像
    """
    img = np.zeros([400,400,1],np.uint8)           #zeros初始化为0;同样是8位
    img[:,:,0] = np.ones([400,40])*127             #ones初始化为1;127就是灰度的
    """
    3637行代码可写成4142行代码
    """
    img = np.ones([400, 400, 1], np.uint8)          #ones初始化为1,单通道
    img =img *255                                   #乘255是白色
    cv.imshow("new.image", img)
图6.2代码

7、类型转换,维度转换

(1)类型转换

cv.convertScaleAbs()

计算完后将结果浮点数变成八位的整型,绝对值变成正的

(2)维度转换

m1 = np.ones([3,3],np.float32)#注意选择合适类型
m1.fill(122,388)
print(m1)
m2 = m1.reshape([1,9])#19print(m2)
#以上是三维转二维

(3)数组fill()方法

m3 = np.array([[2,3,4][4,5,6],[7,8,9]],np.int32)
m3.fill(9)
print(m3)
输出结果本是
	[[2,3,4]
     [4,5,6]
     [7,8,9]]

加上m3.fill(9)后输出结果是
    [[9,9,9]
     [9,9,9]
     [9,9,9]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值