传统CV
文章平均质量分 75
open-cv 的对图像的基本操作,理解图像。
aqiangdeba
这个作者很懒,什么都没留下…
展开
-
空间域和频域的理解
空间域:信号或图像的直接表示,每个数据点的值表示特定的物理量(如像素值)。频域:信号或图像的频率成分表示,帮助分析和处理信号的周期性特征和频率成分。理解空间域和频域的关系和操作,有助于在信号处理和图像处理中选择合适的工具和方法来实现特定的目标。原创 2024-06-22 15:40:20 · 561 阅读 · 0 评论 -
opencv 范数,直方图均衡
norm()用来计算图像的L1,L2,无穷范数以及汉明范数。OpenCV中提供了2种接口形式,第1种接口只需一个输入图像,第2种接口有2个输入图像。src1:输入图像,如果是多通道时不区分通道计算;求汉明范数时必须是单通道8bit数据类型;normType:范数类型;mask:掩码;retval:返回的范数值,浮点类型;src1、src2作为输入图像可以是单通道也可以是多通道图像,当使用多通道图像时,并不分开通道计算,这点和很多函数是不同的。如果要计算单独通道的范数,则需要先将通道分离。原创 2023-03-26 15:40:17 · 822 阅读 · 1 评论 -
opencv 统计函数countNonZero() minMaxloc() sumElems() mean() meanStdDev() reduce()
返回minLoc和maxLoc的坐标位置是以OpenCV中(x,y)的形式组织的,但是在numpy中下标访问是按照array[行][列]形式,类似于array[y][x]的形式,所以minLoc和maxLoc的坐标值不能直接用于numpy的下标访问,需要对调后才可以使用.统计所有元素值之和,如果有多通道,分通道计算,返回的是一个四元组,依次对应图像可能包含的第0,1,2,3通道,如果单通道图像则只有下标0对应的元素有意义,如果是3通道则只有前3个元素有意义。src:输入图像,必须为单通道图像;原创 2023-03-26 11:57:12 · 2626 阅读 · 0 评论 -
opencv 图像梯度sobel Scharr Laplacian边缘检测 Canny
高斯平滑、双边平滑 和 均值平滑、中值平滑 介绍的平滑处理可以看做是图像的“低通滤波”,它会滤除掉图像的“高频”部分,使图像看起来更平滑,而1.sobelSobel梯度会有x和y 2个方向的梯度,x方向梯度是该点右侧像素值的2倍加上右上、右下像素值的和减去左侧像素值的2倍加上左上、左下像素值的和,该点的梯度值和自身无关,只和其左右2侧的像素值有关,y方向的梯度则是和上下方向的像素值有关。src:源图像;ddepth:目标图像深度;dx:x方向求导阶数;dy:y方向求导阶数;原创 2023-03-26 11:28:16 · 424 阅读 · 0 评论 -
形态学变换erode(),膨胀dilate(),结构元getStructuringElement(), 开闭操作梯度顶帽黑帽击中击不中 morphologyEx(),金字塔pyrDown,pyrUp
形态学变换主要有腐蚀、膨胀、开操作、闭操作等等。腐蚀操作可以将边界的白色(前景)像素“腐蚀”掉,但仍能保持大部分白色。类似平滑处理的滑动窗口,用某种结构元在图像上滑动,当结构元覆盖原始图像中的所有像素都为“1”时,新图像中该像素点的值才为“1”(CV8U为255)。腐蚀可以用来去除噪声、去掉“粘连”。src:通道数任意;图像深度只能是CV_8U, CV_16U, CV_16S, CV_32F or CV_64F;kernel:可以由getStructuringElement()构建;原创 2023-03-26 10:55:24 · 228 阅读 · 0 评论 -
opencv 均值平滑blur,中值平滑medianBlur,高斯平滑GaussianBlur(),双边平滑bilateralFilter()
均值、中值、高斯平滑的去躁是一种“无差别攻击”,所有的像素都受到同一个加权系数的影响,所以在平滑过程中也会影响到图像的边沿(像素值突变的地方).双边滤波则可以在去除噪声的同时又能保持图像的边沿,也就是”去噪保边”。对应到高斯分布曲线的特性,当sigma越大时,原点的取值越小,周围点的取值更大,对应到图像上中心点的权重越低,周围点权重越高,所以sigma越大图像越模糊。原创 2023-03-25 15:40:50 · 667 阅读 · 0 评论 -
阈值化threshold(),自适应阈值adaptiveThreshold()
当type设置了cv2.THRESH_OTSU或cv2.THRESH_TRIANGLE标志时,入参thresh没有实际意义,图像并不会跟随thresh发生变化,这是因为该方法会根据图像自动计算阈值,这时threshold()函数返回的第1个值就是自动计算出来的阈值。图像分割的一种:图像的阈值化(有些场合也称二值化)是图像分割的一种,一般用于将感兴趣区域从背景中区分出来,处理过程就是将每个像素和阈值进行对比,分离出来需要的像素设置为特定白色的255或者黑色的0,具体看实际的使用需求而定。原创 2023-03-25 14:37:10 · 276 阅读 · 0 评论 -
opencv 几何空间变换:resize(),transpose(),flip(),warpAffine(),rotate(),warpPerspective()
resize()可以实现图片大小的缩小或放大src:源图像;dsize:缩放后目标图像的尺寸,如果设置为0,目标图像则使用源图像的尺寸乘以fx和fy得到;dsize优先级高于fx和fy,如果设置了dsize,后面的fx和fy设置无效;fx和fy:dsize未设置的情况下,使用fx和fy分别作为宽度和高度的放大倍数;interpolation:插值方法,默认使用双线性插值cv2.INTER_LINEAR;原创 2023-03-25 13:55:37 · 344 阅读 · 0 评论 -
图像的位运算bitwise(),色彩空间变换cvtColor ,颜色图applyColorMap()
1.按位取反bitwise_not()按位取反就是将数值根据每个bit位1变0,0变1,比如0xf0按位取反就变成了0x0f,如果是uint8类型的数据,取反前后的数据相加结果为0xff(255)。2.按位与bitwise_and() ,或bitwise_or() ,异或bitwise_xor()按位与、或、异或操作需要2个图像对象、或者1个图像对象和1个标量数据相互作用.2个图像的按位操作和算术运算一样,也要求2个图像的大小一样,通道数一样。位运算中2个图像的数据类型也必须一致。原创 2023-03-25 11:36:29 · 259 阅读 · 0 评论 -
opencv 图像加法add(), +, addWeighted(),图像减法 subtract(), - ,absdiff(),图像乘法multiply(),*,图像除法,divide(),/
当标量值只是1个数值时,只会对多通道图像的第1个通道进行运算,如果要进行多通道运算,标量值则使用一个包含4个数值的元组表示,即使是3通道的彩色图像也要用4元组表示这个标量值。在OpenCV中图像的算术运算遵循“饱和运算”的规则,如果计算的结果超过了阈值范围,则就近进行截断,比如unit8类型的数据范围是【0,255】,如果2个数值直接相加的结果大于255就会赋值为255.2个图像相减仍然要求通道数一样,图像尺寸一样,同样遵守饱和运算,相减小于0的用0补。第6个参数可选,返回图像的实例,等同于函数返回结果。原创 2023-03-25 09:53:51 · 877 阅读 · 0 评论 -
opencv 通道分离split,合并merge
利用numpy数组的切片或索引操作,比如用img[:,:,0]分离出0通道或b通道,img[:,:,1]对应g通道,img[:,:,2]对应r通道,如果有img[:,:,3]则对应alpha通道。通道分离可以用于彩色图像的处理,图像对象可以是普通的3通道BGR彩色图像,分离后分别为b、g、r的3个通道。如果图像是其他色彩空间的图像比如HSV图像,分离后的3个图像则分别为h、s、v。如果是带alpha通道的BGRA 4通道图像,分离后分别为b、g、r、a。3.通道合并merge()2.索引方式通道分离。原创 2023-03-25 09:20:48 · 445 阅读 · 0 评论 -
opencv 图像属性
一个图像像素的行列数(高、宽)、通道数可以通过shape属性获取,需要注意的是numpy数组的shape属性下标0表示的图像的行数(rows,高),下标1表示的是列数(cols,宽),下标2表示的是通道数,但是如果是灰度图shape是一个二元组,则不存在下标2的元素。(行列,高宽,01):同样的如果要访问的是多行多列的元素值,可以使用切片方法访问,第0个下标是行数的切片,第1个下标是列数的切片,比如要访问下图中第4-6行,第5-10列的元素,则要使用img[4:7,5:11]的方法。原创 2023-03-24 19:49:45 · 544 阅读 · 0 评论 -
open-cv绘制简单形状line() circle() rectangle() polylines() putText() cvtColor()
OpenCV彩色图像中一个像素是按照“”模式组织的。:图像对象: 颜色,如果彩色用一个三元组表示,三元组的元素按照组织,三元组(0,255,0)中B为0,G为255,R为0所以表示的是纯绿色。如果是灰度,则用单个数值表示.:线条宽度。:点位置,用一个二元组表示。: 线条类型,在绘制曲线时通常使用CV2.LINE_AA可以有更好的平滑效果。原创 2023-03-24 17:19:32 · 275 阅读 · 0 评论 -
open-cv:从视频,动图,相机获取图片
构建视频文件的capcap.read()方法逐帧提取视频,每一帧为一幅图像cap.read()方法返回的是一个二元组,下标0的元素值为True或False,如果为Flase表示读取文件完成。下标1的元素为图像对象,也是一个numpy数组类型的数据。read()方法读取是一帧一帧的。用来检查cap实例是否已打开。释放实例。2.从动态图像获取。原创 2023-03-24 16:15:20 · 201 阅读 · 0 评论 -
open-cv 中读取,显示,写入图像
判断自己pytorch虚拟环境是否安装了 cv2 可以使用pip list。原创 2023-03-24 14:35:05 · 319 阅读 · 0 评论