| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> OpenCV-Python计算机视觉函数 -> 正文阅读 |
|
[人工智能]OpenCV-Python计算机视觉函数 |
目录 添加噪声 skimage.util.random_noise 1、概述这篇文章主要记录我所了解到的一些OpenCV的函数和参数介绍,主要是参考博主一马归一码的Python计算机视觉学习做了一些常用的图像处理的函数和具体的参数介绍,方便大家查找,也方便自己回顾复习,同时沉淀自身,加强理解。全文基于Python-OpenCV,import cv2 as cv。 2、OpenCV基础读取图片 imreadcv.imread()?? 括号里面写图片的路径,同在一个文件夹,可以写相对路径也可以绝对路径;不同文件夹,需要写绝对路径 调整显示窗口大小 resizeWindowcv.resizeWindow('windowsname',width,height)? windowsname:窗口名称 width:宽度 height:高度 调整图像尺寸大小 resizecv.resize(InputArray src, OutputArray dst, Size dsize,??fx,? fy, int interpolation=INTER_LINEAR ) InputArray src:输入的图片 OutputArray dst:输出的图片 dsize:是对图片大小进行设置,可以直接(x,y)设置大小,也可以设置为None,通过fx,fy调整 fx:x方向上的缩放比例 fy:y方向上的缩放比例 interpolation:插值方式,一般不设置,直接使用默认值,不对其进行操作 色彩空间进行转换 cvtColorcv.cvtColor(src,cv.COLOR_BGR2GRAY) src:输入的图片 cv.COLOR_BGR2GRAY:这个具体的有很多种,具体格式是cv.COLOR_固定不变,然后是哪个色彩空间到哪个色彩控机,比如BGR到灰度空间,就是BGR2GRAY 绘制线段 linecv.line(img, pt1, pt2, color, thickness, lineType, shift) img:输入图片 plt1:绘制直线的起始点坐标 plt2:绘制直线的终点坐标 color:线的颜色 thickness:线的粗细 linetype:线的形状 shift:有资料显示是坐标点小数点的位数,具体可以不设置,一般用默认值,不设置 绘制矩形框 rectanglecv.rectangle(img, pt1, pt2, color, thickness, lineType, shifte) img:输入图片 plt1:矩形左上角的坐标 plt2:矩形右下角的坐标 color:线条颜色 thickness:线条宽度 linteype:线条形状 shift:有资料显示是坐标点小数点的位数,具体可以不设置,一般用默认值,不设置 绘制圆形 circlecv.circle(img, center, radius, color, thickness, lineType, shift) img:输入图片 center:圆心坐标 radius:半径 color:线条颜色 thickness:线条宽度 linteype:线条形状 shift:有资料显示是坐标点小数点的位数,具体可以不设置,一般用默认值,不设置 绘制椭圆 ellipsecv.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness, lineType, shift) img:输入图片 center:圆心坐标 angle:长轴&短轴 startAngle:起始角度 endAngle:终止角度 color:椭圆颜色 thickness:线宽 lineType:线条形状 shift:一般用默认值,不设置 添加文本 putTextcv.putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin) img:输入图片 text:绘制的文字 org:绘制的位置 fontFace:字体 fontScale:缩放 color:文本颜色 thickness:文本的大小 linetype:线型 bottomleftOrigin:一般不做操作,使用默认值 显示图片 imshowcv.imshow(winname, mat) winname:显示图片窗口的名字 mat:需要显示的图片 保存图片 imwritecv.imwrite(filename, img, params=None) filename:需要保存图像的文件名,后缀为格式 img:要保存的图片 params:表示为特定格式保存的参数编码,一般不对其进行操作,使用默认值 图片显示时长 waitKeycv.waitKey() 一般里面的参数值设置为,代表一直循环把图片显示在桌面上。如果不设置这个,图片只会一瞬间显示,就消失了。括号里面也可以设置显示时长。 释放内存 destroyAllWindowscv.destroyAllWindows() 紧跟着cv.waitKey()出现,在关闭窗口后对内存进行释放 3、数字图像处理基本操作读取像素值 shapeprint(img.shape) img.shape:读取图片的像素值,通过print打印出来 PIL库的使用(与OpenCV比较)主要是使用PIL里面的Image对图像进行操作,导入Image: from PIL import Image 使用Image.open()读取图片,参数为图片的路径 使用Image读取图片时,看图片像素值使用print(img.size)? 会发现结果与OpenCV读取的相反,主要是因为cv.imread()读取的是BGR格式,而Image.open()读取的是RGB格式,所以两者的Red&Blue刚好相反。 Image使用img.save()保存图片,括号里的参数为保存的路径和保存的名称和图片格式,save的前缀是需要保存的图片名字,与OpenCV的cv.imwrite用法相似 4、OpenCV进行图像算数与逻辑运算图像相加 addWeightedcv.addWeighted(src1, alpha, src2, beta, gamma, dst, dtype) 使用该函数的时候,图像分辨率必须一致,通道数一致 src1:图像1 alpha:图像1的权值 src2:图像2 beta:图像2的权值 gamma:为合成图像像素所加的数,也算是像素的偏移量 dst:输出的数组,和输入的两个数组拥有相同的尺寸和通道数 dtype:可选,输出阵列的深度,有默认值-1。当两个输入数组具有相同深度时,这个参数设置为-1 图像像素加常数 addcv.add(src1, src2, dst, mask, dtype) src1:输入的图像1 src2:输入的常数矩阵,和图像1相等大小的,固定常数的矩阵 dst:相加后的输出图像,一般不对其进行操作 mask:8位单通道图像,用于指定哪些像素需要相加,一般不对其进行操作
图像的减法运算 subtractcv.subtract(src1, src2, dst, mask, dtype) src1:输入图像1 src:输入的常数矩阵,和图像1相等大小的,固定常数的矩阵 dst:相减后的输出图像,一般不对其进行操作 mask:8位单通道图像,用于指定哪些像素需要相减,一般不对其进行操作
图像的与运算 bitwise_andcv.bitwise_and(src1, src2, dst=None, mask=None) src1:输入图像1 src2:输入图像2 dst:可选输出变量,一般不对其进行操作 mask:掩膜图像,可选参数,一般不对其进行操作 图像的或计算 bitwise_orcv.bitwise_or(src1, src2, dst, mask) src1:输入图像1 src2:输入图像2 dst:可选输出变量,一般不对其进行操作 mask:掩膜图像,可选参数,一般不对其进行操作 图像的异或运算 bitwise_xorcv.bitwise_xor(src1, src2, dst, mask) src1:输入图像1 src2:输入图像2 dst:可选输出变量,一般不对其进行操作 mask:掩膜图像,可选参数,一般不对其进行操作 图像非运算 bitwise_notcv.bitwise_not(src, dst, mask) src:输入图像 dst:可选输出变量,一般不对其进行操作 mask:掩膜图像,可选参数,一般不对其进行操作 5、OpenCV进行图像几何变换平移图像 warpAffinecv.warpAffine(img,mat,size) img:移动的图像 mat:平移矩阵,决定平移的方向和距离 mat = np.float([[1,0,0],[0,1,20]]) 平移矩阵 对y进行平移20个单位 size:平移后显示的图像大小 旋转变换 getRotationMatrix2Dcv.getRotationMatrix2D(center, angle, scale) center:旋转中心 angle:旋转角度 scale:缩放比例 图片复制 copy.deepcopycopy.deepcopy(img) 需要先导入copy模块? img:需要复制的图片 水平镜像通过for循环对左右像素点进行交换 垂直镜像通过for循环对上下像素点进行交换 对角镜像水平镜像和垂直镜像同时发生,即对角对称 6、透视变换透视矩阵 getPerspectiveTransformcv.getPerspectiveTransform(src, dst, solveMethod) src:原图上四个点的坐标构成的矩阵,要求其中任意三点不共线 dst:目标图像上四个点的坐标构成的矩阵,要求其中任意三点不共线,且每个点与src的对应点对应 solveMethod:矩阵分解方法 example:pts1 = np.float32([[0, 0], [500, 0], [0, 740], [500, 740]]) ???????????????? pts2 = np.float32([[0, 100], [510, 0], [100, 760], [500, 740]]) ????????????????M = cv.getPerspectiveTransform(pts1,pts2) 透视变换 warpPerspectivecv. warpPerspective(src, M, dsize, dst, flags, borderMode, borderValue) src:输入图像矩阵 M:3*3的透视变换矩阵,可以通过getPerspectiveTransform等函数获取 dsize:结果图像大小,为宽和高的二元组 dst:输出结果图像,可以省略,结果图像会作为函数处理结果输出 flags:可选参数,插值方法的组合(int 类型) borderMode:可选参数,边界像素模式(int 类型) borderValue:可选参数,边界填充值 7、OpenCV进行图像量化与采样图像量化量化即对图像进去取模,然后以一些像素值代替所有像素值,其原理与二值法相似,没有具体的函数,具体的代码参考下方
原始图像,与量化不同份的效果图如下: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 图片采样图片采样是把图片以一定的间隔进行像素采样,具体代码如下
?运行结果如下: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?采样时,图像的真实大小会同样发生变化,其大小随着采样点的增加正比例减小 图像金字塔图像金字塔是图像按照分辨率从低到高构成的金字塔,最低的分辨率位于塔尖,原图位于塔底,高斯金字塔可以下采样,也可以实现上采样 高斯金字塔上下采样 pyrDown pyrUpcv.pyrDown(src) src:输入要下采样的图片 cv.pyrUp(src) src:输入要上采样的图片 上采样下采样不可逆,因为丢失的图像序列信息是未知的,需要通过拉普拉斯金字塔来还原原图 拉普拉斯金字塔??L = G-pyrUp(G+1)获取高斯金字塔变换丢失的图像信息??L = G-pyrUp(G+1) 通过拉普拉斯金子塔获取丢失信息,还原原图? 局部马赛克马赛克的原理就是一片区域的像素点以区域里的一个点代替,产生相同像素点,在人眼形成’马赛克视觉‘ 8、Opencv进行直方图统计绘制直方图函数 calcHistcv.calcHist(images, channels, mask, histSize, ranges, hist, accumulate) images:输入的图片 channels:指定通道 [0]代表灰度图,如果读入的图像不是灰度图,该值可以是[0],[1],[2]分别代表 通道 B,G,R mask:掩码图像,进行整张图的绘制时为 None histSize:分成像素组的数量 ranges:像素值范围 accumulate:累计标识,一般可以省略,不对其进行操作 写法除了None不需要[ ],其余都需要 [ ],example cv.calcHist([img], [0], None, [256], [0, 255]) 9、OpenCV进行直方图均衡化实现图像增强全局直方图均衡化 equalizeHistcv.equalizeHist(src) src:需要直方图均衡化的图片 局部直方图均衡化 createCLAHEcv.createCLAHE(clipLimit, tileGridSize) clipLimit:一般设置为2.0 tileGridSize:对图像进行小区域分割 example??cv.createCLAHE(clipLimit=2.0, tileGridSize=(10, 10)) 10、OpenCV进行图像平滑添加噪声 skimage.util.random_noiseskimage.util.random_noise(image, mode=‘gaussian’, seed=None, clip=True, **kwargs) image: 添加噪声的图像 mode: 添加的噪声类型: ‘gaussian’ 高斯加性噪声? ? ? ? ? ? ? ? ‘localvar’ 高斯加性噪声,每点具有特定的局部方差 ?‘poisson’ 泊松分布的噪声 ?'salt’盐噪声,随机用1替换像素。属于高灰度噪声 ?‘pepper’ 胡椒噪声,随机用0或-1替换像素,属于低灰度噪声 ‘s&p’椒盐噪声,两种噪声同时出现,呈现出黑白杂点)? 后面的参数在运用时一般不对其操作,直接使用默认值 均值滤波 blurcv.blur(src,ksize) src:需要处理的图像 ksize:选取的核大小 example? ?cv.blur(img,(6,5)) 方框滤波 boxFiltercv.boxFilter(src,ddepth,ksize,normalize) src:输入图片 ddepth:目标图像的深度 ksize:核大小 normalize:是否归一化,使用布尔值进行选择 example? cv.boxFilter(img, ddepth = -1, ksize(2,2),normalize = False) 高斯滤波 GaussianBlurcv.GaussianBlur(src,kszie,sigmax) src:输入图片 ksize:滤波器大小 sigmax:标准差,一般设置为0 example? cv.GaussianBlur(img,(5,5),0) 中值滤波 medianBlurcv.medianBlur(src,ksize) src:输入图片 ksize:滤波器尺寸大小,必须为奇数 example? cv.medianBlur(img,9) 11、OpenCV图像锐化及边缘检测Sobel算子 Sobelcv.Sobel(src,ddepth,dx,dy,ksize) src :输入图像 ddepth:输出图像深度,输入8U有正负一起可能值很大,最好是CV_16S/CV_32F dx:X方向,几阶导数 dy:?Y方向,几阶导数. ksize:Sobel算子ksize大小,必须是1、3、5、7 example:? cv.Sobel(img,cv.CV_64F,0,1,ksize=5) Laplacian算子 Laplaciancv.Laplacian(src,ddepth,ksize) src:输入图像 ddepth:输出图像深度 ksize:核大小 example:? cv.Laplacian(img,cv.CV_64F) Scharr算子 Scharrcv.Scharr(src,ddepth,dx,dy,ksize) src :输入图像 ddepth:输出图像深度,输入8U有正负一起可能值很大,最好是CV_16S/CV_32F dx:X方向,几阶导数 dy:?Y方向,几阶导数. ksize:核大小 example:? cv.Scharr(img,cv.CV_64F,0,1) Canny算子 Cannycv.Canny(src,threshold1,threshold2) src:输入图片 threshold1:阈值1 threshold2:阈值2 example cv.Canny(img,100,200) 12、OpenCV图像形态学处理图像二值化 thresholdcv.threshold(src,thresh,maxval,type,dst) src:输入图像 thresh:阈值 maxval:当type指定为THRESH_BINARY或THRESH_BINARY_INV时,需要设置该值 type:指定阈值类型 dst:目标图像 图像腐蚀 erodecv.erode(src,kernel,iterations)? src:输入图像 kernel:核的大小 iterations:迭代次数,默认为1 example? cv.erode(img,kernel=(3,3),,iterations=1) 图像膨胀 dilatecv.dilate(src,kernel,iterations) src:输入图像 kernel:核的大小 iterations:迭代次数,默认为1 example? cv.dilate(img,kernel=(3,3),,iterations=1) 图像开、闭、梯度、顶帽、底帽运算 morphologyExcv.morphologyEx(src,op,kernel) src:输入图像 op:操作的类型 kernel:核的大小 开运算把类型设为cv.MORPH_OPEN 闭运算把类型设为cv.MORPH_CLOSE 梯度运算把类型设为cv.MORPH_GRADIENT 顶帽运算把类型设为cv.MORPH_TOPHAT 底帽运算把类型设为cv.MORPH_BLACKHAT 总结与感悟这篇文章主要是来帮自己记住一些函数或者函数的参数操作方法,具体的理论还有全代码学习可以参考(61条消息) 一马归一码的博客_CSDN博客-Python,DSP,Python计算机视觉领域博主这位博主大大的Python计算机视觉,我想肯定会有帮助。里面有些函数只写了主要的参数,一些默认的参数没有全都写完,在实际中使用需要自己依照需求考量。现在先写到这里,随着我的所学,会对内容进行不断地更新以及改进,对参数对函数,对设计的算法领域都会有不断地更新。希望通过博客的方式对所学进行总结,同时对自我进行沉淀,也作为以后回顾的资料。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 6:29:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |