导读 本文主要介绍如何使用 OpenCV + GrabCut实现一个文档自动扫描仪。(公众号:OpenCV与AI深度学习) 背景介绍 文档扫描是将物理文档转换为数字形式的过程。...让我们看看如何使用经典的计算机视觉技术创建一个简单的 OpenCV 文档扫描仪,其中输入将是我们要扫描的文档的图像,而预期的输出将是正确对齐的文档扫描图像。...我们在 23 种不同的背景和不同的方向上进行了测试,自动文档扫描仪几乎在所有情况下都运行良好。...失败情况: 当文档的一部分在图像之外时,可能会丢失一个角落,GrabCut 无法扫描。这是使用 GrabCut 的唯一限制。在大多数其他情况下,我们的文档扫描仪运行良好。...此外,如果文档边缘与背景无法区分,则轮廓检测可能无法完全正常工作。 但 GrabCut 和轮廓检测并不是唯一经过验证的文档扫描方法。
/chaipp0607/article/details/52858661 查找轮廓时内轮廓与外轮廓: http://blog.csdn.net/chaipp0607/article/details/...,我们对它进行轮廓查找,验证一下: 首先用CV_CHAIN_APPROX_SIMPLE的方法,在for循环中,我们把包围轮廓的点个数作为判断条件,个数大于30个且小于50个是,把这个轮廓在原图中涂成蓝色...,而大于50时,涂成绿色,运行结果如下: 可以看到,中间的兴趣区域的面积明显是要大于右下角的三角形面积的,但是包围它的轮廓的点的个数确要小于三角形的区域,这是因为中间的区域非常接近于矩形,区域规则时只需要很少的点就可以将它描绘出来...最后补充一点: findcontours函数将二值化后图像白色区域当作前景,黑色部分当做背景。所以找轮廓找到的是白色区域的轮廓。...这个函数有一个特点,如果白色区域延伸到了图像边界,那么图像的边界也是被当作轮廓的一部分,这就造成了可能会出现一个很大的外轮廓。
本文说白了就是个简单的查找轮廓,并且绘制轮廓。简单说一下这俩个函数用法。 函数cv2.findContours()有三个参数。第一个是输入图像,第二个是轮廓检索模式,第三个是轮廓近似方法。...第三个参数是对轮廓(第二个参数)的索引,当需要绘制独立轮廓时很有用,若要全部绘制可设为-1。接下来的参数是轮廓的颜色和厚度。...还有在使用OpenCV查找轮廓时,为了更准确,需要进行二值化处理:阈值化处理或者进行Canny边缘检测。查找轮廓的函数会修改原始图片,当需要使用原始图片时得注意。...并且在OpenCV中查找轮廓就像在黑色背景中找白色背景,所以要找的物体应该是白色,而背景是黑色(来源于OpenCV官方教程中文版)。...)) #创建白色幕布 temp = np.ones(binaryImg.shape,np.uint8)*255 #画出轮廓:temp是白色幕布,contours是轮廓,-1表示全画,然后是颜色,厚度
对于第一部分,我们将使用OpenCV的“ boundingRect()”检测每个轮廓的边界矩形,并检查纵横比(高宽比)是否接近1。 现在我们的任务已经完成,但还需要进行一些微调。...我们将使用OpenCV函数“ drawContours()”,将颜色用作白色(R,G,B = 255,2555,255),将厚度用作FILLED(-1)在黑色背景上绘制所有四个线段轮廓。...用于提取我们的ROI的蒙版 在原始图像上应用此蒙版可以在我们选择的背景(例如黑色或白色)上为我们提供所需的分段。...在黑色背景上提取的ROI 对于白色背景,我们首先创建一个白色画布,然后通过使用OpenCV函数“ drawContours()”绘制轮廓为黑色(R,G,B = 0,0,0)且厚度为FILLED的轮廓,如下所示创建颜色反转的蒙版...用于ROI提取的备用倒置掩模(图像源作者) 然后,我们使用OpenCV “ add()”函数将此反向蒙版添加到先前获得的黑色背景中,并获得相同的结果,但使用白色背景。 ?
对于第一部分,我们将使用OpenCV的“ boundingRect()”检测每个轮廓的边界矩形,并检查纵横比(高宽比)是否接近1。 现在我们的任务已经完成,但还需要进行一些微调。...我们将使用OpenCV函数“ drawContours()”,将颜色用作白色(R,G,B = 255,2555,255),将厚度用作FILLED(-1)在黑色背景上绘制所有四个线段轮廓。...在原始图像上应用此蒙版可以在我们选择的背景(例如黑色或白色)上为我们提供所需的分段。...对于白色背景,我们首先创建一个白色画布,然后通过使用OpenCV函数“ drawContours()”绘制轮廓为黑色(R,G,B = 0,0,0)且厚度为FILLED的轮廓,如下所示创建颜色反转的蒙版(...然后,我们使用OpenCV “ add()”函数将此反向蒙版添加到先前获得的黑色背景中,并获得相同的结果,但使用白色背景。 ? 到此为止,我们总结了几种方法,可以轻松地从图像中提取感兴趣区域。
这在具有不同照明情况的应用中特别有用,特别是在扫描气泵中。 将图像设置为阈值后,可以使用OpenCV的findContours方法查找图像中连接了白色像素部分的区域。...由于大家可能希望使用,所以这似乎向后看,dilate但是这些方法通常适用于图像的白色部分。在我们的案例中,我们正在“侵蚀”白色背景以使数字看起来更大。...侵蚀出来的数字 反转图像 在尝试在图像中查找轮廓之前,我们需要反转颜色,因为该findContours方法将找到白色的连接部分,而当前的数字是黑色。...当我们过滤轮廓时,我们收集了可能是十进制的正方形轮廓。从上一步获得经过验证的数字轮廓之后,我们将找到数字的最左x位置和最右x位置,以确定我们期望的小数位数。...现在,当我训练数字时,我将获得NumPy文件供我的Python测试使用,然后获取一个JSON文档,我可以将其拖到我的iOS应用程序中。
这在具有不同照明情况的应用中特别有用,特别是在扫描气泵中。 将图像设置为阈值后,可以使用OpenCV的findContours方法查找图像中连接了白色像素部分的区域。...由于大家可能希望使用,所以这似乎向后看,dilate但是这些方法通常适用于图像的白色部分。在我们的案例中,我们正在“侵蚀”白色背景以使数字看起来更大。...侵蚀出来的数字 反转图像 在尝试在图像中查找轮廓之前,我们需要反转颜色,因为该findContours方法将找到白色的连接部分,而当前的数字是黑色。...当我们过滤轮廓时,我们收集了可能是十进制的正方形轮廓。从上一步获得经过验证的数字轮廓之后,我们将找到数字的最左x位置和最右x位置,以确定我们期望的小数位数。...现在,当我训练数字时,我将获得NumPy文件供我的Python测试使用,然后获取一个JSON文档,我可以将其拖到我的iOS应用程序中。您可以在此处看到该代码。
这篇文章主要介绍了python 基于opencv 绘制图像轮廓的示例,帮助大家更好的利用python的opencv库处理图像,感兴趣的朋友可以了解下 图像轮廓概念 轮廓是一系列相连的点组成的曲线,代表了物体的基本外形...注意:寻找轮廓是针对白色物体的,一定要保证物体是白色,而背景是黑色,不然很多人在寻找轮廓时会找到图片最外面的一个框。...hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE) print(len(contours)) 参数2:轮廓的查找方式...经验之谈:很多人画图时明明用了彩色,但没有效果,请检查你是在哪个图上画,画在灰度图和二值图上显然是没有彩色的。...以上就是python 基于opencv 绘制图像轮廓的详细内容
1 什么是轮廓 轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。 轮廓在形状分析和物体的检测和识别中很有用 –为了更加准确,要使用二值化图像。...–在寻找轮廓之前,要进行阈值化处理或者 Canny 边界检测 –查找轮廓的函数会修改原始图像 –如果你在找到轮廓之后还想使用原始图像的话,你应该将原始图像存储到其他变量中 –在 OpenCV...中,查找轮廓就像在黑色背景中找白色物体 –你应该记住, 要找的物体应该是白色而背景应该是黑色 函数 cv2.findContours() //函数imread读取的图像本身就是灰色的,不用再置灰处理...Python 列表,其中存储这图像中的所有轮廓 每一个轮廓都是一个 Numpy 数组,包含对象边界点(x,y)的坐标 2 怎样绘制轮廓 函数 cv2.drawContours() 可以被用来绘制轮廓...–第三个参数是轮廓的索引(在绘制独立轮廓是很有用,当设置为-1时绘制所有轮廓)。
为了让Pytho n相应地处理输入数据,我们将导入适当的库。我们将使用OpenCV(cv2)读取图像。...转换为灰度不仅可以减少计算复杂性,而且对于查找轮廓(稍后的步骤)也很重要,因为OpenCV可以从黑色背景中的白色连接对象中查找轮廓。 ? 调整大小并转换为灰度后的图像: ?...2、扫描图像以查看由边缘定义的所有不同形状 当我们查看一个对象时,我们的眼睛会通过其边缘检测到对象的形状,该对象的边缘与其背景,周围或相邻对象有颜色差异。...3.假定车牌是矩形,从与前面步骤不同的所有形状中找出与矩形最匹配的形状 当给人一张带有牌照的图像时,我们的眼睛就能从其他所有形状中找出牌照,因为我们的先验知识告诉我们这是一个矩形的形状,具有四个相连的角...要将这个想法应用到Python,我们首先将OpenCV findContours函数应用到图4上以查找所有闭合轮廓。
目标 了解轮廓概念 寻找并绘制轮廓 OpenCV函数:cv2.findContours(), cv2.drawContours() 教程 啥叫轮廓 轮廓是一系列相连的点组成的曲线,代表了物体的基本外形。...经验之谈:寻找轮廓是针对白色物体的,一定要保证物体是白色,而背景是黑色,不然很多人在寻找轮廓时会找到图片最外面的一个框。....RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) print(len(contours)) # 结果应该为2Copy to clipboardErrorCopied 参数2:轮廓的查找方式...经验之谈:很多人画图时明明用了彩色,但没有效果,请检查你是在哪个图上画,画在灰度图和二值图上显然是没有彩色的(⊙o⊙)。...接口文档 cv2.findContours() cv2.RetrievalModes cv2.ContourApproximationModes cv2.drawContours() 引用 本节源码 Contours
目标 了解轮廓是什么。 学习查找轮廓,绘制轮廓等。 你将看到以下功能:cv.findContours(),cv.drawContours() 什么是轮廓?...因此,在找到轮廓之前,请应用阈值或canny边缘检测。 从OpenCV 3.2开始,findContours()不再修改源图像。 在OpenCV中,找到轮廓就像从黑色背景中找到白色物体。...因此请记住,要找到的对象应该是白色,背景应该是黑色。...它的第一个参数是源图像,第二个参数是应该作为Python列表传递的轮廓,第三个参数是轮廓的索引(在绘制单个轮廓时有用。...但是在大多数情况下,以下方法会很有用: cnt = contours[4] cv.drawContours(img, [cnt], 0, (0,255,0), 3) 注意 最后两种方法相似,但是前进时,
导读 本文主要介绍使用OpenCV对二值图做孔洞填充的方法与实现。 背景介绍 为什么要做孔洞填充?因为在部分情况下,二值图内部的孔洞和外部轮廓是一个整体,填充孔洞可以方便后续处理,减少干扰。...OpenCV孔洞填充的常用方法有2种: ① 形态学闭运算。闭运算是先膨胀后腐蚀操作,如上图,先膨胀白色高亮区域增加,孔洞会被填充。...但使用闭运算针对不同的图片不能准确知道需要的核大小是多少,所以并不能通用; ② 轮廓绘制方法。通过轮廓绘制drawContours函数设置绘制线宽为-1即可填充绘制。...但查找轮廓一般是在二值图处理之后才会使用,这样会造成重复操作。 尽量在二值图时完成孔洞填充,不影响后续操作顺序才是最终目标!...参考链接:https://learnopencv.com/filling-holes-in-an-image-using-opencv-python-c/
膨胀腐蚀是基于高亮部分(白色)操作的,膨胀是対高亮部分进行膨胀,类似“领域扩张”, 腐蚀是高亮部分被腐蚀,类似“领域被蚕食”。...边缘检测的一般步骤: 滤波:滤出噪声対检测边缘的影响 ; 增强:可以将像素邻域强度变化凸显出来—梯度算子 ; 检测:阈值方法确定边缘 ; 常用边缘检测算子: Canny 算子,Canny 边缘检测函数...轮廓查找与绘制 核心要理解到在 OpenCV 中,查找轮廓就像在黑色背景中找白色物体。...常用函数: 查找轮廓 cv2.findContours(); 绘制轮廓 cv2.drawContours() 。 最后应该掌握针对每个轮廓进行操作。 20....OpenCV 应用部分之运动物体跟踪与人脸识别 了解何为运动物体检测,OpenCV 中常用的运动物体检测方法有背景减法、帧差法、光流法,跟踪算法常用的有 meanShift, camShift,粒子滤波
翻译及二次校对:cvtutorials.com 目标 • 理解什么是轮廓线。 • 学习查找轮廓、绘制轮廓等。...• 从OpenCV 3.2开始,findContours()不再修改源图像了。 • 在OpenCV中,寻找轮廓线就像从黑色背景中寻找白色物体。所以请记住,要找到的物体应该是白色的,背景应该是黑色的。...然后它输出轮廓线和层次结构。轮廓线是一个包含图像中所有轮廓线的Python列表。每个单独的轮廓线是一个Numpy数组,包含物体边界点的(x,y)坐标。...它的第一个参数是源图像,第二个参数是轮廓线,应该以Python列表的形式传递,第三个参数是轮廓线的索引(在绘制单个轮廓线时很有用。 要绘制所有轮廓线,传递-1),其余参数是颜色、厚度等。...轮廓线逼近法 这是cv.findContours函数的第三个参数。它实际上表示什么呢? 上面我们说过,轮廓线是具有相同灰度的形状的边界。它存储了一个形状的边界的(x,y)坐标。
image, InputOutputArray markers ) 操作步骤 将白色背景变成黑色-目的是为后面的变换做准备 使用filter2D与拉普拉斯算子实现图像对比度提高...绘制轮廓- drawContours 分水岭变换 watershed 对每个分割区域着色输出结果 代码演示 新建一个项目opencv-0027,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入...运行显示的图像为 ? 1.将白色背景变成黑色 ? 我们运行看一下 ? 可以看到右边的已经把背景都换为黑色了。 2.使用filter2D与拉普拉斯算子实现图像对比度提高,sharp ?...7.腐蚀得到每个Peak 效果不太好看,我们需要再进行二值的腐蚀,把上面的代码再修改一下 ? 我们再看一下运行效果,可以看出来比刚才的效果好很多了 ? 8.标记并且开始查找轮廓 ?...这一步只是查找轮廓,我们接下来绘制查找的轮廓再一起显示出来 9.绘制轮廓 ?
织物具有一定的密实度和厚度,颜色一般为白色,生产时的质量缺陷主要为劈缝缺陷,在线生产速度为2m/min,幅宽一般为2.5m左右,检测精度要求为0.5mm。...图2 有缺陷和无缺陷玻璃纤维织物 采集图像后,采用OpenCV图像处理软件进行织物的质量检测。...图像分割:采用全局阈值法进行图像分割,即利用threshold函数实现缺陷和背景纹理的二值化分割,有缺陷的用白色像素表示,背景纹理用黑色表示。...特征提取:利用OpenCV中findContours实现形态学处理后图像的轮廓提取与分析,先采用contourArea函数计算出每个轮廓的面积,并通过与设定的面积参数比较赛选出符合缺陷面积特征的轮廓后,...本文根据实际生产情况搭建了基于机器视觉的玻璃纤维织物在线检测平台,结构简单,易于实现,照明方式减少了织物材质对成像的影响,使图像中的目标信息与背景信息得到了最佳的分离,形成了有利于图像处理的成像效果。
我们将在本章介绍以下主题: OpenCV 4 的新功能 选择和使用正确的设置工具 运行示例 查找文档,帮助和更新 技术要求 本章假定您正在使用以下操作系统之一: Windows 7 SP1 或更高版本...这些行可能会将脚本与错误的 Python 安装(对于我们的特定设置)明确关联。 查找文档,帮助和更新 可以在这个页面中找到 OpenCV 的文档,您可以在其中在线阅读或下载以供离线阅读。...查找类或函数时,请确保阅读标题为python下的部分。 OpenCV 的 Python 模块名为cv2。 cv2中的2与 OpenCV 的版本号无关。 我们确实在使用 OpenCV4。...如果只想获取最外部的轮廓,请使用cv2.RETR_EXTERNAL。 在对象出现在纯背景上并且我们不关心在对象内查找对象的情况下,这可能是一个不错的选择。...另外,尝试各种物体和照明条件,以查看它们如何影响(或不影响)红外图像。 当您对测试结果感到满意时,让我们继续进行其他技术进行深度估计。 (我们将在后续章节中再次介绍深度相机。)
导 读 本文主要介绍如何使用OpenCV获取不规则区域的最大内切圆。...(公众号:OpenCV与AI深度学习) 实现步骤 核心思路是使用距离变换来获取最大内切圆,具体步骤如下: 【1】将目标轮廓/区域提取出来,处理成二值图:目标区域白色(255),背景黑色...(0),并将目标区域填充为白色(255)。...测试原图: 二值化 + 轮廓提取 + 填充绘制: 【2】距离变换:获取距离变换结果最大值及其坐标。...transImg; normalize(dt, transImg, 0, 255, NORM_MINMAX); imshow("distanceTransform", transImg); //查找最大值
领取专属 10元无门槛券
手把手带您无忧上云