栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

面向python,Opencv学习笔记(一)---1

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

面向python,Opencv学习笔记(一)---1

学习笔记
    • 前言
  • 1.1 Numpy_Attributes.py中ndarray对象常用属性的使用示例
    • 1.2 Numpy_Attributes.py
    • 1.3 结果
  • 2.1 Numpy_Operations.py中Numpy相关函数的操作示例
    • 2.2 Numpy_Operations.py
    • 2.3 结果
  • 3.1 numpy的部分函数快于Opencv(使用numpy函数原因吧。)
    • 3.2 Compare_opencv_numpy.py中的Opencv/Numpy对比示例
    • 3.3 结果对比:

前言

要求opencv版本4.1.2.30(4.x >=版本),我的版本4.5.3
Numpy并非opencv重点,这里仅介绍相关函数的简单使用方法

1.1 Numpy_Attributes.py中ndarray对象常用属性的使用示例

ndarrary.shape
ndarray.dtype
ndarray.ndim
ndarray.size

1.2 Numpy_Attributes.py

代码如下:

import cv2 as cv
import sys

if __name__ =='__main__':
    img  = cv.imread('./chapter_2/flower.jpg')
    if img is None:
        print('Failed to read flower.jpg')
        sys.exit()
    else:
        print('图像形状:{}n 元素数据类型:{}n 图像通道数:{}n 像素总数:{}'.format(img.shape,img.dtype,img.ndim,img.size))
        
1.3 结果

2.1 Numpy_Operations.py中Numpy相关函数的操作示例

np.arrary() 创建数据
np.zeros() 创建全0矩阵
np.ones() 创建全1矩阵
img[x1:x2,y1:y2] 图片裁剪操作左上角坐标(x1,y1)右下角坐标(x2,y2)
np.random.randint() 给定范围内的随机整数
np.random.randn() 服从均值为0,标准差为1的正态分布数据

有关操作见下代码

2.2 Numpy_Operations.py

代码如下:

import cv2 as cv
import numpy as np
import datetime
import sys

if __name__ == '__main__':
    #创建ndarray对象
    #使用np.array()创建一个5*5,数据类型为float32的对象(矩阵)
    a = np.array([[1,2,3,4,5],
    [6,7,8,9,10],
    [11,12,13,14,15],
    [16,17,18,19,20],
    [21,22,23,24,25]],dtype='float32')
    #使用np.ones()创建一个5*5,数据类型为uint8的全1对象
    b = np.ones((5,5),dtype='uint8')
    #使用np.zeros()创建一个5*5,数据类型为float32的全0对象
    c = np.zeros((5,5),dtype='float32')
    print(f'a:n{a}')
    print(f'b:n{b}')
    print(f'c:n{c}')

    #ndarray对象切片和索引
    image = cv.imread('./chapter_2/flower.jpg')
    if image is None:
        print('Failed to read flower.jpg')
        sys.exit()
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    #读取图像位于(45,45)的像素值
    print('位于(45,45)的像素值为{}'.format(gray[45,45]))
    #裁剪部分图像(灰度图像和rgb图像)
    res_gray = gray[40:280,60:340]
    res_color1=image[40:280,60:360,:]
    res_color2=image[100:220,80:220,:]

    #通道分离

    b = image[:,:,0]
    g = image[:,:,1]
    r = image[:,:,2]

    #展示裁剪和分离结果
    cv.imshow('Result crop gray',res_gray)
    cv.imshow('Result crop color1',res_color1)
    cv.imshow('Result crop color2',res_color2)
    cv.imshow('Ressult split b',b)
    cv.imshow('Result split g',g)
    cv.imshow('Result split r',r)

    #生成随机数
    #生成一个5*5,取值范围为0~100的数组
    values1 = np.random.randint(0,100,(5,5),dtype='uint8')
    #生成一个2*3,元素服从均值为0,标准差为1,的正态分布的数组
    values2 = np.random.randn(2,3)
    print(f'生成随机数(np.random.randint):n{values1}')
    print(f'生成随机数(np.random.randn):n{values2}')

    cv.waitKey(0)
    cv.destroyAllWindows()

2.3 结果

3.1 numpy的部分函数快于Opencv(使用numpy函数原因吧。) 3.2 Compare_opencv_numpy.py中的Opencv/Numpy对比示例
import cv2 as cv
import numpy as np
import datetime
import sys

from numpy.lib.type_check import _imag_dispatcher

if __name__ =='__main__':
    image = cv.imread('./chapter_2/flower.jpg')
    if image is None:
        print('Failed to read flower.jpg')
        sys.exit()

    #对比通道的分离
    #使用Opencv中的cv.split()函数
    begin1=datetime.datetime.now()
    for i in range(100000):
        b1,g1,r1= cv.split(image)
    end1 = datetime.datetime.now()
    print('通道分离(Opencv):{}s'.format((end1-begin1).total_seconds()))

    #使用numpy中的切片和索引
    begin2 = datetime.datetime.now()
    for i in range(100000):
        b2 = image[:,:,0]
        g2 = image[:,:,1]
        r2 = image[:,:,2]
    end2 = datetime.datetime.now()
    print('通道分离(Numpy):{}s'.format((end2-begin2).total_seconds()))

    #将BGR图像转化为RGB图像
    #使用Opencv中的cv.cvtColor()函数
    begin3 = datetime.datetime.now()
    for i in range(100000):
        image_rgb = cv.cvtColor(image,cv.COLOR_BGR2RGB)
    end3 = datetime.datetime.now()
    print('BGR转RGB(Opencv):{}s'.format((end3-begin3).total_seconds()))
    #使用Numpy中的切片和索引

    begin4 = datetime.datetime.now()
    for i in range(100000):
        image = rgb = image[:,:,::-1]
    end4 = datetime.datetime.now()
    print('BGR转RGB(Numpy):{}s'.format((end4-begin4).total_seconds()))



3.3 结果对比:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/302458.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号