OpenCV学习笔记
仅为本人学习opencv时记录的笔记
所用教程来自:https://www.bilibili.com/video/BV1oJ411D71z?p=2
ljt爱喝老猪阿茶
这个作者很懒,什么都没留下…
展开
-
12 图像拼接
在进行图像拼接前先了解几个算法和概念1.Brute-Force蛮力匹配直接用两张图的特征进行匹配,有一对一和k对最佳匹配两种方法1.一对一匹配sift = cv2.xfeatures2d.SIFT_create() #注意3.4.15版本以后已经不能用了,可以改用ORB算法kp1, des1 = sift.detectAndCompute(img1, None) #用sift方法提取出两张图的特征点kp2, des2 = sift.detectAndCompute(img2, None)bf原创 2020-05-15 17:07:49 · 428 阅读 · 0 评论 -
11 获取图像特征点 sift
原理:1.图像尺度空间一个物体不论是近处人们可以分辨出来,远处也可通过轮廓进行分辨,图像尺度空间就是通过制造模糊程度不同的图像,即不同的尺度,让计算机对不同尺度下的物体有一个统一的认知不同尺度的效果如下:不同σ的高斯函数决定了对图像的平滑程度,越大的σ值对应的图像越模糊。2.多分辨率金字塔由于要在远处,即物体比较小的时候也能分辨出来,只做一个同样大小的尺度远远不够,因此还要做一个多分辨率金字塔。图像的不同尺度是为了在相同的大小下让计算机能够识别出来物体,多分辨率金字塔是为了让计算机能在远近原创 2020-05-14 10:58:00 · 348 阅读 · 0 评论 -
10 harris 角点检测
1.harris 角点检测原理R的取值为多少的时候认为是角点,还要自行设定阈值通过额外的代码来进行判断,在后面的代码有显示。有时候在角点周围的一小片区域算出来的R值可能都比较大,这时候最后还要进行非极大值抑制2.opencv函数调用求出每个点的角分数ksize一般取(3,3)k的取值对应的前面角点相应R值里面的aimport cv2 import numpy as npimg = cv2.imread('test_1.jpg')print ('img.shape:',i原创 2020-05-13 12:25:26 · 111 阅读 · 0 评论 -
08 傅里叶变化
1.傅里叶变换对图片进行频域上的处理opencv中主要就是cv2.dft()和cv2.idft(),输入图像需要先转换成np.float32 格式。得到的结果中频率为0的部分会在左上角,通常要转换到中心位置,可以通过shift变换来实现。cv2.dft()返回的结果是双通道的(实部,虚部),通常还需要转换成图像格式才能展示(0,255)。import numpy as npimpor...原创 2020-05-07 22:52:34 · 198 阅读 · 0 评论 -
08 图像直方图
1.图像直方图统计一张图片每个像素或不同范围内的像素点个数可以用与比较两张图是否一样,相似度问题cv.calcHist(images, channels, mask, histSize, ranges)images:图像格式应为uint8或float32,传入时以[image]格式channels:以[]表示统计的通道,灰度图就是[0],彩色图可以是[0][1][2],一次只能一个通道...原创 2020-05-07 22:25:21 · 143 阅读 · 0 评论 -
07 轮廓绘制的一些应用
1.绘制外接矩形cv.boundingRect(cnt)输入一个轮廓信息,会返回一个x,y坐标和矩形的宽和高cv.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)输入起点的(x,y)坐标,以右下角为起点,利用给定的宽高来绘制出一个矩形img = cv2.imread('contours.png')gray = cv2.cvtColor(img, cv...原创 2020-04-18 00:21:50 · 131 阅读 · 0 评论 -
07 轮廓检测
1.轮廓提取函数:cv.findContours(img,mode,method)1.mode:轮廓检索模式RETR_EXTERNAL :只检索最外面的轮廓;RETR_LIST:检索所有的轮廓,并将其保存到一条链表当中;RETR_CCOMP:检索所有的轮廓,并将他们组织为两层:顶层是各部分的外部边界,第二层是空洞的边界;RETR_TREE:检索所有的轮廓,并重构嵌套轮廓的整个层次;一...原创 2020-04-17 23:47:50 · 245 阅读 · 0 评论 -
06 图像金字塔
图像金字塔有高斯金字塔和拉普拉斯金字塔,简单来说就是图像进行缩放。高斯金字塔有下采样和上采样。下采样是从最大的那层即最底层不断以1/2的形式缩小,可以把金字塔看成是倒立的。上采样反之。同时,要想进行金字塔操作,图像的大小必须是2的倍数,金子塔的层数直接由图像的大小是2的多少倍决定1.高斯金字塔高斯金字塔有上采样和下采样:下采样: PyrUp(image)1.先经过高斯卷积核进行平...原创 2020-04-17 22:48:04 · 144 阅读 · 0 评论 -
05 Canny边缘检测
Canny算子Canny算子对边缘处理的会比Sobel等算子更加细致,他的边缘细致到单个像素的层面为什么通过比较梯度的大小就可以判断边缘:梯度往往会比周围的点更加明亮,所以在求导后即梯度较其他点大。流程:转灰度图 —> 平滑处理(高斯滤波) —> 计算每点的梯度和梯度方向(Sobel算子等)—>非极大值抑制(筛选边缘)—>双阈值进一步筛选边缘1.非极大值抑制在用S...原创 2020-04-17 00:19:40 · 164 阅读 · 0 评论 -
04 图像梯度处理 Scharr算子和Laplacian算子
可见Scharr算子和Sobel原理类似,只是他将差异进一步放大,对差异更加敏感Laplacian算子对变化更敏感,同时对噪音也会敏感,所以单独使用效果并不好,一般和其他处理配合下面看几种算子的效果对比img = cv2.imread('lena.jpg',cv2.IMREAD_GRAYSCALE)sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3...原创 2020-04-15 22:47:09 · 193 阅读 · 0 评论 -
04 图像梯度处理 Sobel算子
Sobel算子先来看看sobel算子矩阵的构造,称作卷积核更合适,这就是卷积运算以3*3卷积核为例可以看出Gx卷积核会增强垂直方向两边的差异,而Gy卷积核会增强水平方向上下的差异。同时可以看到,离中间越近代表的权重越大,同时差异会更加明显,类似高斯分布函数:dst = cv2.Sobel(src, ddepth, dx, dy, ksize)ddepth:图像的深度dx和dy分别表...原创 2020-04-15 22:28:04 · 1705 阅读 · 0 评论 -
03 图像形态学处理 (腐蚀、膨胀操作、开闭运算、梯度运算、礼帽黑帽)
1.腐蚀操作'''腐蚀原理:在一个卷积核内,如果存在不同的像素值,则某些像素会被另一部分腐蚀掉,即将其值修改为其他的像素值当然,如果卷积核内像素值都一样则不会发生腐蚀,所以边界处腐蚀效果会更明显'''kernel = np.ones((3,3),np.uint8) #设置卷积核大小erosion = cv2.erode(img,kernel,iterations = 1) #腐蚀操作...原创 2020-04-15 21:43:00 · 981 阅读 · 0 评论 -
02 图像处理(阈值分割、平滑处理)
1.图像阈值ret, dst = cv2.threshold(src, thresh, maxval, type)src: 输入图,只能输入单通道图像,通常来说为灰度图dst: 输出图thresh: 阈值maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值type:二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY; cv2.THR...原创 2020-04-14 18:24:28 · 870 阅读 · 0 评论 -
01基本操作(边界填充,图片融合)
1.图片读取cv.imread(‘path’, cv.IMREAD_GRAYSCALE / cv.IMREAD_COLOR)cv.cvtColor(image, cv.COLOR_BGR2GRAY) 彩色空间转换,第二个参数选择很多cv.waitKey()cv.imshow(‘name’, image)cv.destoryAllWindows()2.视频读取vc = cv.Vide...原创 2020-04-14 17:44:31 · 560 阅读 · 0 评论