【播资讯】2 opencv-python核心库模块core

博客园 2023-07-05 22:28:40

core模块定义了opencv中的基础数据结构和基础运算,是整个库的核心模块。而mat数据结构是opencv中最重要的数据结构,是opencv中图像最常用的存储格式。

1 基本数据结构


(相关资料图)

opencv的基本数据结构有mat数据结构,point数据结构,rect数据结构,size数据结构。

1)在python中,mat类型的对象构造操作可以通过numpy来实现(创建图像矩阵)

如下代码构建全0矩阵m1,然后将所有值初始化为128,还可以用copy进行矩阵拷贝,也可以对图像数据的部分原始值进行修改。

import cv2import numpy as np        #python中,mat类型的对象通过numpy来实现m1 = np.zeros([512,512],np.uint8)  #创建全0二维矩阵m1[:] = 128  #初始化赋值m2 = m1.copy()   #把m1图像拷贝到m2m2[128:384,128:384] = 0  #将行,列为128到384的区域像素值赋值为0cv2.imshow("m2",m2)cv2.imshow("m1",m1)cv2.waitKey(0)cv2.destroyAllWindows()

可以对图像矩阵进行裁剪和缩放,裁剪直接用python的切片来完成,缩放可以用opencv的 resize() 函数来操作。resize函数介绍如下:

cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) -> dst

参数说明:

src:原图像;dst:改变大小的目标图像;dsize:输出图像的大小。

fx:width方向的缩放比例;fy:height方向的缩放比例;

interpolation:指定插值的方式,图像resize之后,像素要重新计算,靠这个参数来指定重新计算像素的方式,有以下几种: INTER_NEAREST - 最邻近插值 INTER_LINEAR - 双线性插值,如果最后一个参数你不指定,默认使用这种方法 INTER_AREA -区域插值 INTER_CUBIC - 4x4像素邻域内的双立方插值 INTER_LANCZOS4 - 8x8像素邻域内的Lanczos插值

有两点需要注意:1dsize和fx/fy不能同时为0。指定dsize的值,让fx和fy直接省略或置0 或者dsize=None或置 (0,0),指定fx和fy的值,(dsize不可省略,会报错)。2图像的size是(h,w),而resize的操作是先w,再h。

import cv2         #图像裁剪和缩放import numpy as npimg = cv2.imread("cat.jpg")cv2.imshow("cat",img)rows = img.shape[0]   #图像的行(高) [h,w,c]cols = img.shape[1] #图像的列(宽)img2 = img.copy()    #把img1图像拷贝到img2img2 = cv2.resize(img2,(int(cols/2),int(rows/2)))  #图像尺寸减小为原来的一半,不是裁剪 [w,h]cv2.imshow("img2",img2)img3 = img[0:int(rows/2),0:int(cols/2)]   #图像裁剪为原来的1/4,用切片来裁剪,cropped_image = img[80:280, 150:330]  切片img[高,宽]cv2.imshow("img3",img3)cv2.waitKey(0)cv2.destroyAllWindows()

2)在opencv中,点的定义由point类实现。python语言中,point类型可以由tuple元组表示,然后利用numpy进行点乘和叉乘计算。

import numpy as np     #tuple元组点乘叉乘(向量内积/外积)point1 = (10,20)point2 = (2,4)print(type(point1))  #tuple(元组,有序且不可更改的集合)类型,# 元组与列表相似,不同之处在于元组的元素不能修改,而列表的元素可以修改。元组使用小括号(),列表使用中括号[]。res1 = np.dot(point1,point2) #点乘print("res1",res1)point3 = (1,2,3)point4 = (4,5,6)res2 = np.cross(point3,point4)  #叉乘,输出一个向量,方向垂直于输入两向量形成的平面print("res2",res2)

3)opencv中定义了矩形的表示类rect,模板类rect定义了顶点坐标,宽高,面积等信息的获取操作,以及矩形是否包含点的判断操作。在python中的rect也是通过tuple类型的数据表示,即左上角坐标点(x,y)和矩形宽高4个值表示的rect为(x,y,w,h)的形式,在需要传入rect数据类型的地方,可以按照tuple类型的数据传入。

4)opencv的很多函数中都需要传入size类型的参数,比如mat类的后置函数为mat(Size size,int type),需要通过size类型对象传入构造矩阵的尺寸。size类型对象包含两个成员变量width和height。python中的size对象也是通过tuple类型的数据表示,即 (w,h) 的形式传入宽高数据的,在需要传入size数据类型的地方,可以按照tuple类型的数据传入。

2 矩阵运算

core模块中提供了图像矩阵的基本运算,opencv对这些基本运算都做了封装,比如四则运算,位运算,比较运算等。

标签:

广告

Copyright ?   2015-2022 海峡商场网版权所有  备案号:皖ICP备2022009963号-10   联系邮箱:396 029 142 @qq.com