python+openCV
记录自己openCV方面的学习过程
缄默:)
我是一名普通高校的大学生,发博客主要是为了方便记录自己的学习,如果哪些地方存在错误,请各位大佬批评指正!另如有侵权,请及时联系我删除!
展开
-
Python+OpenCV入门教程【十九】建立一个自定义的cascade分类器
文章导航1.收集正样本2.处理正样本3.收集负样本4.生成描述文件5.训练分类器1.收集正样本这里需要注意的是,正样本图需要裁剪,使目标物体轮廓很清晰,且正样本图越多越好。2.处理正样本将正样本图片转为灰度图,方便后续处理。def convert_gray(f, **args): # 图片处理与格式化的函数 rgb = io.imread(f) # 读取图片 gray = color.rgb2gray(rgb) # 将彩色图片转换为灰度图片 dst = transf原创 2020-08-24 11:27:22 · 1627 阅读 · 1 评论 -
Python+OpenCV入门教程【十八】人脸检测
Opencv的人脸检测函数,定义了具体可跟踪对象类型的数据文件。Haar级联分类器,通过对比分析相邻图像区域来判断给定图像或子图像与已知对象是否匹配。两个图像的相似程度可以通过它们对应特征的欧式距离来度量。距离可能以空间坐标或颜色坐标来定义。类Haar特征是一种用于实现实时人脸跟踪的特征。每个类Haar特征都描述了相邻图像区域的对比模式。例如,边,顶点和细线都能生成具有判断性的特征。Haar级联级具有尺度不变性,换句话说,它在尺度变化上具有鲁棒性。但是,opencv的Haar级联不具有旋转不变性。在原创 2020-08-22 11:21:43 · 201 阅读 · 0 评论 -
Python+OpenCV入门教程【十七】分水岭算法
基于距离的分水岭分割流程:1、输入图像2、灰度(消除噪声)3、二值化4、距离变换5、寻找种子6、生成Marker7、分水岭变换8、输出图像原理参考:分水岭](https://blog.csdn.net/yukinoai/article/details/88575861?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm原创 2020-08-21 22:22:06 · 292 阅读 · 0 评论 -
Python+OpenCV入门教程【十七】图像的开闭操作
图像的开运算:通过先进行腐蚀操作,再进行膨胀操作得到。我们在移除小的对象时候很有用(假设物品是亮色,前景色是黑色),被用来去除噪声。图像的闭运算:闭运算是开运算的一个相反的操作,具体是先进行膨胀然后进行腐蚀操作。通常是被用来填充前景物体中的小洞,或者抹去前景物体上的小黑点。因为可以想象,其就是先将白色部分变大,把小的黑色部分挤掉,然后再将一些大的黑色的部分还原回来,整体得到的效果就是:抹去前景物体上的小黑点了。import cv2 as cv# 图像的开闭操作def open_image(im原创 2020-08-21 18:54:59 · 327 阅读 · 0 评论 -
Python+OpenCV入门教程【十六】图像的膨胀与腐蚀
图像的膨胀与腐蚀原理:点击了解下面展示 代码。from cv2 import cv2 as cv#腐蚀def erode_demo(image): print(image.shape) # 转为灰度图 gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) # 图像二值化 ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV|cv.THRESH_OTSU)原创 2020-08-21 16:21:34 · 312 阅读 · 0 评论 -
Python+OpenCV入门教程【十五】轮廓发现及对象测量
轮廓发现:当通过阈值分割提取到图像中的目标物体后,就需要通过边缘检测来提取目标物体的轮廓,使用这两种方法基本能够确定物体的边缘或者前景。接下来,通常需要做的是拟合这些边缘的前景,如拟合出包含前景或者边缘像素点的最小外包矩形、圆、凸包等几何形状,为计算它们的面积或者模板匹配等操作打下坚实的基础。对象测量:opencv 中轮廓特征包括:如面积,周长,质心,边界框等。findContours()与drawContours()详解点击此处下面展示 代码。import cv2 as cvimport num原创 2020-08-21 15:54:06 · 433 阅读 · 0 评论 -
Python+OpenCV入门教程【十四】Canny边缘检测
函数:HoughCircles(image, circles, method, dp, minDist, param1, param2, minRadius, maxRadius)参数解释image:输入图像:8-bit,灰度图circles:输出圆的结果。method:定义检测图像中圆的方法。目前唯一实现的方法是HOUGH_GRADIENT。dp:寻找圆弧圆心的累计分辨率,这个参数允许创建一个比输入图像分辨率低的累加器。(这样做是因为有理由认为图像中存在的圆会自然降低到与图像宽高相同数量的范畴)原创 2020-08-21 14:56:26 · 246 阅读 · 0 评论 -
Python+OpenCV入门教程【十三】直线检测
下面展示 代码。import cv2 as cvimport numpy as np# 霍夫直线检测def line_image(image,minVal,maxVal): # 转为灰度图 gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) # canny边缘检测 edges = cv.Canny(gray, minVal, maxVal, apertureSize=3) lines = cv.HoughLines(ed原创 2020-08-21 14:47:16 · 154 阅读 · 0 评论 -
Python+OpenCV入门教程【十二】Canny边缘检测
Canny算法实现需要五步:高斯模糊灰度转换计算梯度非最大信号抑制高低阈值输出二值图像算法原理参考:Canny算法原理下面展示 代码。import cv2 as cv# 边缘检测述算法def edge_image(image): # 高斯模糊 blurred = cv.GaussianBlur(image, (1, 1), 0) # 转灰度图 gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY) #原创 2020-08-21 12:17:29 · 224 阅读 · 0 评论 -
Python+OpenCV入门教程【十一】图像梯度
图像梯度的基本原理:点击了解下面展示 代码。import cv2 as cv# 图像梯度:索贝尔算子def sobel_image(image): grad_x = cv.Sobel(image, cv.CV_32F, 1, 0) # x方向导数 grad_y = cv.Sobel(image, cv.CV_32F, 0, 1) # y方向导数 gradx = cv.convertScaleAbs(grad_x) grady = cv.convertScaleA原创 2020-08-21 11:19:34 · 152 阅读 · 0 评论 -
Python+OpenCV入门教程【十】图像二值化
二值图像(Binary Image) 是指将图像上的每一个像素只有两种可能的取值或灰度等级状态,人们经常用黑白、B&W、单色图像表示二值图像二值图像是指在图像中,灰度等级只有两种,也就是说,图像中的任何像素灰度值不是0就是255,再无其他过渡的灰度值。全局阈值 OpenCv的threshold函数进行全局阈值。其函数原型为:cv.threshold(src, thresh, maxval, type[, dst]) -> retval, dstsrc:表示输入图像(多通道,8位或32位原创 2020-08-20 22:39:52 · 420 阅读 · 1 评论 -
Python+OpenCV入门教程【九】模版匹配
模版匹配介绍:所谓的模板匹配,即在给定的图片中查找和模板最相似的区域,该算法的输入包括模板和测试图片,整个任务的思路就是按照滑窗的思路不断的移动模板图片,计算其与图像中对应区域的匹配度,最终将匹配度最高的区域选择为最终的结果。下图展示了一个样例,左边是对应的模板,右边是在测试图片中检测的结果。函数介绍TM_SQDIFF,TM_SQDIFF_NORMED匹配数值越低表示匹配效果越好,其它四种反之。TM_SQDIFF_NORMED,TM_CCORR_NORMED,TM_CCOEFF_NORMED是标准化的原创 2020-08-20 21:25:44 · 292 阅读 · 0 评论 -
Python+OpenCV入门教程【八】图像直方图及其应用
图像直方图(英语:Image Histogram) 是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数。可以借助观察该直方图了解需要如何调整亮度分布。这种直方图中,横坐标的左侧为纯黑、较暗的区域,而右侧为较亮、纯白的区域。因此,一张较暗图片的图像直方图中的数据多集中于左侧和中间部分;而整体明亮、只有少量阴影的图像则相反。直方图应用: 直方图均衡化:提升对比度的两种方法:默认、自定义直方图均衡化:直方图均衡化是一种简单有效的图像增强技术,通过改变图像的直方图来改变图像中各像素的灰度,主要原创 2020-08-20 16:45:16 · 314 阅读 · 0 评论 -
Python+OpenCV入门教程【七】利用卷积对图像进行模糊操作
卷积:就是对于某一位置的像素,通过算法来把它附近的所有像素点的值联合起来,重新设置这个像素的大小。(个人理解)1.均值模糊函数blur():定义:blur(src,ksize,dst=None, anchor=None, borderType=None) 定义是有5个参数,但最后三个均为none,所以也就2个参数 src:要处理的原图像 ksize: 周围关联的像素的范围:代码中(5,5)就是9*5的大小,就是计算这些范围内的均值来确定中心位置的大小2.中值模糊函数medianBlur():原创 2020-08-20 14:14:25 · 334 阅读 · 0 评论 -
Python+OpenCV入门教程【六】ROI与泛洪填充
ROI(region of interest),也就是感兴趣区域,如果你设置了图像了ROI,那么在使用OpenCV的函数的时候,会只对ROI区域操作,其他区域忽略。floodFill函数详解:参数:image 【输入/输出】 1或者3通道、 8bit或者浮点图像mask 【输入/输出】 操作掩码,必须为单通道、8bit,且比image宽2个像素、高2个像素seedPoint 起始像素点newVal 重绘像素区域的新的填充值(颜色)rect 可选输出参数,返回重绘区域的最小绑原创 2020-08-19 23:04:42 · 240 阅读 · 0 评论 -
Python+OpenCV入门教程【五】像素运算
一:数值运算opencv自带图片色素的处理函数:相加:add()相减:subtract()相乘:multiply()相除:divide()原理就是:通过获取两张(一次只能是两张)个图片的同一个位置的色素值来实现运算。运算的要求:两张图片的shape要一样。例图:二:逻辑运算opencv自带图片色素的处理函数:与:bitwise_add()或:bitwise_or()非:bitwise_not()异或:bitwise_xor()与运算口诀:&与运算,有0为0,全1为1原创 2020-08-19 20:40:07 · 292 阅读 · 0 评论 -
Python+OpenCV入门教程【四】色彩空间转换
由于RGB通道并不能很好地反映出物体具体的颜色信息,而相对于RGB空间,HSV空间能够非常直观的表达色彩的明暗,色调,以及鲜艳程度,方便进行颜色之间的对比。所以我们经常使用色彩空间转换。下面展示 代码。import cv2 as cvimport numpy as np# 色彩空间的转换def color_space_demo(image): gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) # RGB转换为gray cv.ims原创 2020-08-19 17:30:33 · 177 阅读 · 0 评论 -
Python+OpenCV入门教程【三】Numpy数组操作
# _*_ coding:utf-8 _*_# @Time : 2020/8/19 15:04 # @Author : Whipser# @File : demo03.pyimport cv2 as cvimport numpy as np# numpy数组操作def access_pixles(image): print(image.shape) height = image.shape[0] width = image.shape[1] channel原创 2020-08-19 16:03:05 · 409 阅读 · 0 评论 -
Python+OpenCV入门教程【二】调用摄像头
下面展示 代码片。import cv2 as cv# 打开摄像头获取图片def video_demo(): capture = cv.VideoCapture(0) # 打开摄像头,0代表的是设备id,如果有多个摄像头,可以设置其他数值 while True: ret, frame = capture.read() # 读取摄像头,它能返回两个参数,第一个参数是bool型的ret,其值为True或False,代表有没有读到图片;第二个参数是frame,是当前截取原创 2020-08-19 14:55:04 · 338 阅读 · 0 评论 -
Python+OpenCV入门教程【一】图像的加载与保存
写这篇文章的主要目的还是记录自己的学习,以后忘记的时候还可以复习一遍。感兴趣的朋友也可以看看。 在接下来的学习中,我会附上详细注释的代码和材料,以及原理部分。希望我写的东西,能够对大家有所帮助。 在学习之前,我们需要了解一点,机器人看到的不是图像,而是数组。下面展示 代码。import cv2 as cvimport numpy as np# 输出图片属性def get_image_info(image): # 定义一个函数来输出图片的一些属性 print(type(ima原创 2020-08-19 12:46:24 · 234 阅读 · 0 评论