OpenCV(基于Python)
https://www.bilibili.com/video/BV1PV411774y?p=1
beyond谚语
你只管努力,剩下的交给天意。
展开
-
图片透视变换操作
由于照相机硬件设备直接的误差,可能会导致镜头畸变,从而导致照相机拍摄到的照片产生失真现象,此时可以通过透视变换去适当的校正。大概的思路:在原图像上确定四个点,然后再新图像上也确定四个点,通过warpMatrix方法,确定出对应的函数关系,从而将图像进行校正。import cv2import numpy as npimg = cv2.imread('beyond.png')result3 = img.copy()#src和dst的输入并不是图像,而是图像对应的顶点坐标src = np.flo原创 2022-03-07 12:20:41 · 723 阅读 · 0 评论 -
24-光流估计
光流是空间运动物体在观测成像平面上的像素运动的“瞬间速度”,根据各个像素点的速度矢量特征,可以对图像进行动态分析,例如目标跟踪亮度恒定:同一点随着时间的变化,其亮度不会发生改变小运动:随着时间的变化不会引起位置的剧烈变化,只有小运动情况下才能用前后帧之间单位位置变化引起的灰度变化去近似灰度对位置的偏导数空间一致:一个场景上邻近的点投影到图像上也是邻近点,且邻近点速度一致。因为光流法基本方程约束只有一个,而要求x,y方向的速度,有两个未知变量,所以需要联立n多个方程求解Lucas—Kanade算法原创 2021-10-19 21:40:08 · 177 阅读 · 0 评论 -
23-背景建模
帧差法由于场景中的目标在运动,目标的影像在不同图像帧中的位置不同。该类算法对时间上连续的两帧图像进行差分运算,不同帧对应的像素点相减,判断灰度差的绝对值,当绝对值超过一定阈值时,即可判断为运动目标,从而实现目标的检测功能。帧差法很简单,但会引入噪音和空洞问题混合高斯模型在进行前景检测前,先对背景进行训练,对图像中每一个背景采用一个混合高斯模型进行模拟,每个背景的混合高斯的个数可以自适应,然后在测试阶段,对新来的像素进行GMM匹配,如果该像素值能够匹配其中一个高斯,则认为是背景,否则认为是前景。由于原创 2021-10-19 21:36:32 · 1088 阅读 · 0 评论 -
22-随机抽样一致算法RANSAC
随机抽样一致算法(Random sample consensus,RANSAC)看似复杂,其基本思想就是:随机选取俩点,然后连接,给定一个容忍范围,在这个范围内的点越多越好,然后不断的迭代进行找两点之间容忍范围内点最多的区域选择原始样本进行拟合,给定一个容忍范围,不断进行迭代每一次拟合后,容忍范围内都有对应的数据点数,找出数据点个数最多的情况,就是最终的拟合结果单应性矩阵...原创 2021-10-19 21:34:02 · 182 阅读 · 0 评论 -
21-特征匹配方法(Brute-Force蛮力匹配)
Brute-Force蛮力匹配cv2.BFMatcher(crossCheck = True)crossCheck表示两个特征点相互匹配例如A中的第i个特征点与B中的第j个特征点最近,并且B中的第j个特征点到A中的第i个特征点也是NORM_L2:归一化数组的(欧几里得距离),如果其他特征计算方法需要考虑不同的匹配计算方法import cv2import numpy as npfrom matplotlib import pyplot as plt%matplotlib inlinedef原创 2021-10-19 21:32:10 · 684 阅读 · 0 评论 -
20-SIFT算法
import cv2import numpy as npfrom matplotlib import pyplot as pltdef show_photo(name,picture):#图像显示函数 cv2.imshow(name,picture) cv2.waitKey(0) cv2.destroyAllWindows()img = cv2.imread('E:\Jupyter_workspace\study\data/cfx.png')gray = cv2.cvt原创 2021-10-16 22:08:08 · 119 阅读 · 0 评论 -
19-Harris角点检测
角点检测顾名思义,就是对类似顶点的检测,与边缘有所区别边缘可能在某一方向上变化不是特别明显,但角点在任何方向上变换都很明显cv2.cornerHarris(img,blockSize,ksize,k)cv2.cornerHarris(gray,2,3,0.04)参数一:img,类型为float32的图像参数二:blockSize 角点检测中指定区域的大小参数三:ksize Sobel算子求导中使用的窗口大小,一般情况设置为3参数四:k 取值参数为[0.04,0.06],opencv推荐使用0.原创 2021-10-16 21:14:46 · 92 阅读 · 0 评论 -
18-傅里叶变化
以时间为参照就是时域分析,当然时间是动态变化的而傅里叶变换是以频域为基准的,不用关心动态变化,只关心做了多少次而已,次数,频率傅里叶说过,任何一个周期函数都可以用正弦函数堆叠起来形成。强吧?傅里叶变换思想傅里叶变换的作用高频:变化剧烈的灰度分量,比如边界低频:变化缓慢的灰度分量,比如一个池塘里面水(非边界)滤波低通滤波器:只保留低频(低通:低频通过),会使得图像模糊高通滤波器:只保留高频(高通:高频通过),会使得图像细节增强opencv中主要就是cv2.dft()和cv2.idft(),原创 2021-10-14 22:30:49 · 214 阅读 · 0 评论 -
17-直方图
直方图何为直方图?没那么高大上,其实就是二维统计图。每个照片都是有像素点所组成,当然也是[0,255],直方图就是统计每个值所对应的像素点有几个。直方图横坐标表示0-255这些像素点值;纵坐标表示对应像素点值的个数有多少个,例如:像素为55的像素点有多少个cv2.calcHist(images,channels,mask,histSize,ranges)cv2.calcHist([img],[0],None,[256],[0,256])参数一:images:原图像格式为uint8或float32;原创 2021-10-14 20:43:26 · 865 阅读 · 0 评论 -
16-模板匹配
模板匹配和卷积原理很像,模板从原图像上从原点开始滑动,计算模板与(图像被模板覆盖的地方)的差别程度,这个差别程度的计算方法在opencv中有六种,然后将每次计算的结果放入一个矩阵里,作为结果输出。假如原图像是A×B的大小,而模板是a×b的大小,则输出结果的矩阵是(A-a+1)×(B-b+1)import cv2import numpy as npfrom matplotlib import pyplot as pltdef show_photo(name,picture):#图像显示函数原创 2021-10-13 22:38:24 · 461 阅读 · 1 评论 -
15-轮廓检测
边缘是零零散散的,而轮廓是一个整体cv2.findContours(img,mode,method)img:输入图像对象名称mode:轮廓检索模式RETR_EXTERNAL:只检索最外面的轮廓RETR_LIST:检索所有的轮廓,并将其保存到一条链表当中RETR_CCOMP:检索所有的轮廓,并将他们组织为两层;顶层是各部分的外部边界,第二层为空洞的边界RETR_TREE:检索所有的轮廓,并重构嵌套轮廓的整个层次(最常用)method:轮廓逼近方法CHAIN_APPROX_NONE:以Fre原创 2021-10-13 22:17:01 · 338 阅读 · 0 评论 -
14-图像金字塔
由第一个图可知,图像金字塔这无非就是对图像进行放大和缩小罢了1,高斯金字塔向下采样方法(缩小),越采样越小,即从金字塔底部向上采样向上采样方法(放大),越采样越大,即从金字塔顶部向下采样import cv2import numpy as npdef show_photo(name,picture): cv2.imshow(name,picture) cv2.waitKey(0) cv2.destroyAllWindows()#原图img = cv2.imre.原创 2021-10-13 18:18:50 · 108 阅读 · 0 评论 -
13-Canny边缘检测
Canny边缘检测主要思路步骤如下:1,使用高斯滤波器,以平滑图像,滤除噪声2,计算图像中每个像素点的梯度强度和方向3,应用非极大值抑制,以消除边缘检测带来的杂散响应4,应用双阈值检测来确定真实的潜在的边缘5,通过抑制孤立的弱边缘最终完成边缘检测1,高斯滤波器:中间点比较大,越边缘越小2,梯度和方向:用到Sobel算子,含有x和y两个方向3,非极大值抑制4,双阈值检测A超过maxVal保留作为边界处理,B和C都在minVal和maxVal之间,但是C连有边界A,所以C保留,而B原创 2021-10-13 18:07:46 · 269 阅读 · 0 评论 -
12-图像梯度-Scharr算子和laplacian算子
Scharr算子与Sobel算子相比,其对结果的差异更明显一些laplacian算子其他算子都是一阶导的感觉,而laplacian算子提到了一个二阶导,相当于一阶导的变换率所以laplacian算子对一些变化会更加的敏感,但是这个算子会对噪音点更加敏感,这并不是一件好事,因为噪音点并不是边界通常都是与其他算子搭配使用,不经常单独使用这个算子...原创 2021-10-12 22:36:00 · 279 阅读 · 0 评论 -
11-图像梯度-Sobel算子
图像梯度是指图像某像素在x和y两个方向上的变化率(与相邻像素比较),是一个二维向量,由2个分量组成,X轴的变化、Y轴的变化 。其中X轴的变化是指当前像素右侧(X加1)的像素值减去当前像素左侧(X减1)的像素值。同理,Y轴的变化是当前像素下方(Y加1)的像素值减去当前像素上方(Y减1)的像素值。其实Sobel算子求梯度也是分为x轴方向和y轴方向,说白了就是将一个卷积核进行上下左右划分,x轴方向上就是右➖左,y轴方向上就是下➖上cv2.Sobel(img,cv2.CV_64F,1,0,ksize = .原创 2021-10-12 22:26:32 · 3832 阅读 · 0 评论 -
10-礼帽与黑帽操作
礼帽运算:原始的输入-开运算(先腐蚀再膨胀)原始带刺儿,开运算先腐蚀把刺儿腐蚀掉,然后再膨胀最后不带刺儿了开运算之后不带刺儿了,原始-不带刺儿=只剩下刺儿黑帽运算:闭运算(先膨胀再腐蚀)-原始输入原始带刺儿,闭运算先膨胀刺儿也变大了,再腐蚀时,刺儿腐蚀不掉了闭运算之后,刺儿还存在并且变粗了粗刺儿-原始细刺儿=刺儿没了只留下了点点轮廓import cv2import numpy as npdef show_photo(name,picture): cv2.imshow(name,pi原创 2021-10-12 12:00:01 · 518 阅读 · 0 评论 -
09-梯度运算
梯度运算=膨胀操作-腐蚀操作,这里的-操作是图像的减法,可不是简单的加减乘除运算为了更加形象生动,先将膨胀和腐蚀操作的结果进行合并展示,然后再与梯度运算进行比较cv2.morphologyEx(pie,cv2.MORPH_GRADIENT,kernel)第一个参数:图像对象的名称第二个参数:梯度运算模式第三个参数:卷积核的大小膨胀和腐蚀操作import cv2import numpy as npdef show_photo(name,picture): cv2.imshow(na原创 2021-10-12 11:39:42 · 319 阅读 · 0 评论 -
08-开运算和闭运算
开运算和闭运算实则就是将腐蚀操作和膨胀操作结合而已,也就是个先后循序罢了开运算:先腐蚀再膨胀闭运算:先膨胀再腐蚀import cv2import numpy as npdef show_photo(name,picture): cv2.imshow(name,picture) cv2.waitKey(0) cv2.destroyAllWindows()#原图img = cv2.imread('E:\Jupyter_workspace\study\data/jiaju原创 2021-10-12 11:20:27 · 381 阅读 · 0 评论 -
07-对图像进行膨胀操作
形态学中的膨胀操作即让照片变得更大,与腐蚀操作互为逆运算此时就可与腐蚀操作进行相结合,腐蚀去毛毛但是会损坏图像粗细,然后再膨胀尽可能还原图像import cv2import numpy as npdef show_photo(name,picture): cv2.imshow(name,picture) cv2.waitKey(0) cv2.destroyAllWindows()img = cv2.imread('E:\Jupyter_workspace\study\d原创 2021-10-12 10:58:25 · 491 阅读 · 0 评论 -
06-对图像进行腐蚀操作
形态学中的腐蚀操作一般处理的图像数据为二值的kernel表示拿多大的卷积核去腐蚀iterations表示迭代次数可以将一些带有毛毛的图像去毛毛化原图import cv2import numpy as npdef show_photo(name,picture): cv2.imshow(name,picture) cv2.waitKey(0) cv2.destroyAllWindows()img = cv2.imread('E:\Jupyter_workspace\原创 2021-10-12 10:33:59 · 717 阅读 · 0 评论 -
05-图像的平滑处理(不同的滤波操作)
对图像进行平滑处理实则就是对图像进行滤波操作罢了每张图片都有若干个像素点所构成,滤波操作上就是将照片上的某些部分像素点进行修改从而达到平滑的效果先展示一下原图import cv2img = cv2.imread('E:\Jupyter_workspace\study\data/test1.png')cv2.imshow('test1',img)#以test1为命名的窗口进行显示cv2.waitKey(0)cv2.destroyAllWindows()均值滤波简单的平均卷积操作先确定原创 2021-10-12 09:56:02 · 775 阅读 · 0 评论 -
04-图像的阈值操作
对图像的阈值操作import cv2import matplotlib.pyplot as pltimg = cv2.imread('E:/Jupyter_workspace/study/data/cat.png',1)ret, thresh1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)ret, thresh2 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)ret, thresh3 = cv原创 2021-10-11 22:15:36 · 198 阅读 · 0 评论 -
03-对图像进行数值计算和加权融合
数值计算import cv2img_1 = cv2.imread('E:\Jupyter_workspace\study\data/beyond.png')img_2 = cv2.imread('E:\Jupyter_workspace\study\data/water2.png')img_1_1 = img_1 + 10img_1[:2,:,0]#输出前两行就行img_1_1[:2,:,0]#[h,w,c]img_2[:2,:,0]#[h,w,c](img_1 + img_2)[:2原创 2021-10-11 18:33:15 · 360 阅读 · 0 评论 -
02-对图像进行边界填充
import cv2import matplotlib.pyplot as pltimg2 = cv2.imread("E:\Jupyter_workspace\study\data/cat.png")#读取照片,第二个参数若为0,则灰度图;若不填或者1则彩色图或本身图top_size,bottom_size,left_size,right_size = (50,50,50,50)replicate = cv2.copyMakeBorder(img2,top_size,bottom_size,原创 2021-10-11 16:25:07 · 541 阅读 · 0 评论 -
01-图像ROI区域获取
截取部分图像数据import cv2img2 = cv2.imread("E:\Jupyter_workspace\study\data/cat.png")#读取照片,第二个参数若为0,则灰度图;若不填或者1则彩色图或本身图picture = img2[0:400,0:400]#截取照片所需要的部分cv_show('test1',picture)#通过test1窗口进行显示截取的图像颜色通道提取import cv2img2 = cv2.imread("E:\Jupyter_workspace原创 2021-10-11 15:40:33 · 462 阅读 · 0 评论 -
改变Jupyter的默认项目路径
开始接触Jupyter,看见它默认的工作路径是C盘,很难受想换下工作空间路径管理员身份打开你的Anaconda Prompt输入jupyter notebook --generate-config,找到你的配置文件位置修改一下路径即可原创 2021-10-07 14:53:33 · 202 阅读 · 0 评论 -
Anaconda下安装TensorFlow和OpenCV(都是心血呀~)
从国庆放假到现在的6号,我整整搞了将近五天多。安装个TensorFlow和OpenCV不下五次,各种问题各种解决,下载后卸载,卸载后下载,我快吐了啊这个国庆,但是最终还是达到了自己的目标(我太难了,菜小燕不配拥有国庆假期QAQ)成功很难,但坚持一定很酷~一,下载安装Anaconda,网上版本众说纷纭,我这边版本放下面了,自行下载q4d6不强调的都是直接下一步哈wins+R打开运行窗口,输入cmd进入命令窗口,输入python,查看当的python版本为3.8.5PS:这是因为anaco原创 2021-10-06 18:51:21 · 6889 阅读 · 3 评论 -
OpenCV笔记(基于Python)
学习时,将每块注释分别去掉即为一个模块知识点图像数字化import numpy as np"""#二维的ndarry#两行四列全是0的uchar类型的二维数组z = np.zeros((2,4),np.uint8)print(type(z))print(z)print("\n")#两行四列全是1的整型矩阵o = np.ones((2,4),np.int32)print(o)print("\n")#浮点型矩阵m = np.array([[4,12,3,1],[10,12,14原创 2021-10-04 17:59:06 · 193 阅读 · 0 评论