使用OpenCV自动去除背景色

几天前,我遇到了一个项目,要求将草图放到某个文件夹中时删除草图的白色背景。这都是在硬件扫描仪中发生的。

下面是一个草图示例:

第一步是安装此项目的依赖关系,具体需要内容我们将在下面列出。此外,我们还将使用Python 3.7。

    opencv_python==4.1.0.25pip install opencv-pythonnumpy==1.16.4pip install numpy

    之后,我们将导入项目所需的所有模块

      import cv2import osimport stringimport randomfrom os import listdirfrom os.path import isfile, join, splitextimport timeimport sysimport numpy as npimport argparse

      然后,我们创建三个不同的变量:要处理的文件夹的名称,图像在处理后存储的文件夹的名称,以及在监视文件夹时的轮询时间(即,它检查文件夹中更改的频率,在我们这里设置的是一秒钟)

        watch_folder = ‘toprocess’processed_folder = ‘processed’poll_time = 1

        文件夹“ toprocess”和“ processed”放置在和我们的python脚本的同一目录中。

        然后,我们将介绍我们程序主要功能的代码,它将监视我们的“ toprocess”目录,如果没有发生任何更改,程序将处理存入在该文件夹的所有图像。

          before = dict([(f, None) for f in os.listdir(watch_folder)])while 1: time.sleep(poll_time) after = dict([(f, None) for f in os.listdir(watch_folder)]) added = [f for f in after if not f in before] removed = [f for f in before if not f in after] if added: print(“Added “, “, “.join(added)) if added[0] is not None: processImage(added[0]) if removed: print(“Removed “, “, “.join(removed)) before = after

          这段代码将无限循环运行,直到脚本被杀死为止。启动后,它将文件存储在名为“ before”的词典目录中。接下来,下面将分解介绍无限循环中的步骤:

          • 睡眠指定的poll_time(1秒)。
          • 将文件信息存储在名为after的字典目录中。
          • 通过比较之后的IN和之前的NOT来存储已添加的内容
          • 检查最后添加的元素(added [0])(如果存在),然后调用一个函数,我们将在文件上稍作介绍的processImage进行讨论。
          • 如果已删除,请通过打印一些信息来让用户知道。
          • 最后,将目录中的最新文件进行更新。

          接下来介绍processImage函数,这是程序的核心。这就是OpenCV后台删除魔术发生的地方。下面的注释解释了该代码(需要基本的OpenCV知识):

            def processImage(fileName): # Load in the image using the typical imread function using our watch_folder path, and the fileName passed in, then set the final output image to our current image for now image = cv2.imread(watch_folder + ‘/’ + fileName) output = image # Set thresholds. Here, we are using the Hue, Saturation, Value color space model. We will be using these values to decide what values to show in the ranges using a minimum and maximum value. THESE VALUES CAN BE PLAYED AROUND FOR DIFFERENT COLORS hMin = 29 # Hue minimum sMin = 30 # Saturation minimum vMin = 0 # Value minimum (Also referred to as brightness) hMax = 179 # Hue maximum sMax = 255 # Saturation maximum vMax = 255 # Value maximum # Set the minimum and max HSV values to display in the output image using numpys' array function. We need the numpy array since OpenCVs' inRange function will use those. lower = np.array([hMin, sMin, vMin]) upper = np.array([hMax, sMax, vMax]) # Create HSV Image and threshold it into the proper range. hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) # Converting color space from BGR to HSV mask = cv2.inRange(hsv, lower, upper) # Create a mask based on the lower and upper range, using the new HSV image # Create the output image, using the mask created above. This will perform the removal of all unneeded colors, but will keep a black background. output = cv2.bitwise_and(image, image, mask=mask) # Add an alpha channel, and update the output image variable *_, alpha = cv2.split(output) dst = cv2.merge((output, alpha)) output = dst # Resize the image to 512, 512 (This can be put into a variable for more flexibility), and update the output image variable. dim = (512, 512) output = cv2.resize(output, dim) # Generate a random file name using a mini helper function called randomString to write the image data to, and then save it in the processed_folder path, using the generated filename. file_name = randomString(5) + ‘.png’ cv2.imwrite(processed_folder + ‘/’ + file_name, output)

            接下来是一个非常简单的功能,可以正确地完成工作。再次强调,使用阈值可以提供更好的结果。我们需要讨论的最后一件事是mini helper函数,该函数为文件名生成随机字符串。

              def randomString(length): letters = string.ascii_lowercase return ‘’.join(random.choice(letters) for i in range(length))

              这是一个简单的功能。它使用“string”库获取字母,然后根据我们传入的长度加入随机选择的字符。传入5的长度将生成5个字符的字符串。

              整个程序的处理结果如下所示:

              (0)

              相关推荐

              • Python+opencv 图像处理(五)

                    灰度反转 "你说的黑是什么黑......"有一首歌的歌词是这样的. 在图像中,黑是什么? 很简单,就是0嘛. 因为在数字图像里,用0表示黑. 那么,"你说的白是什 ...

              • GitHub 又一 OCR 神器面世!让你快速告别「复制 粘贴」!

                来自机器之心 对很多人来说,将 PDF 转换为可编辑的文本是个刚需,却苦于没有简单方法.在本文介绍的项目中,来自 K1 Digital 的高级机器学习工程师 Lucas Soares,尝试使用 OCR ...

              • opencv调用yolov3模型来进行图像检测

                之前使用了opencv来调用ssd的模型来检测物体,今天学了一下用opencv调用yolov3的模型来检测物体,二者在预测图形的部分,代码流程差不多,反正就是加载模型然后预测输出,但是对于输出结果的处 ...

              • python+opencv图像处理(三)

                彩色图像拆分与合并 外面的世界很精彩,很缤纷,很鲜艳,很五颜六色...... 通常我们拍摄的图片都是彩色的,即RGB图像.自然界中的绝大多数颜色也都可以看作是由红(Red).绿(Green).蓝(Bl ...

              • 【AI基础】OpenCV,PIL,Skimage你pick谁

                汤兴旺 就读于吉林大学汽车工程学院,计算机视觉爱好者,言有三弟子 作者 | 汤兴旺 编辑 | 汤兴旺/言有三 如何对图像进行处理是深度学习图像处理的基础,我们常常需要对图像进行读取.保存.缩放.裁剪. ...

              • opencv调用darknet

                本文主要介绍如何通过opencv调用已经训练好的darknet模型进行目标检测 1.模型及配置文件下载 需要下载以下文件 已经训练好的模型权重文件 **.weights 模型配置文件 yolov3.c ...

              • 使用Python读取图片中的文本数据

                CoolAuthor:Dario RadečićTitle: Read Text from Image with One Line of Python CodeSite https://towards ...

              • CAD2022功能讲解—自动去除打印戳记,图纸白白净净全靠它

                自动去除打印戳记,图纸白白净净全靠它 自动去除打印戳记,图纸白白净净全靠它 展开

              • 如何使用OpenCV自动校正文本图像

                重磅干货,第一时间送达 今天,我们想与您分享解决图像偏移校正问题(拉直旋转图像)的简单解决方案.如果我们正在从歪斜图像中提取文本的内容,则必须以一种或另一种形式处理图像.从摄像机图片到扫描的文档-将清 ...

              • 一款十分便捷的自动去除图片水印的外国软件

                (文末开奖)关于图片去水印的问题,一直都被大家所津津乐道.盘妹儿也用过不少去水印的软件.但是大多数去水印的软件,不是广告太多就是效果不好.令人满意的软件少之又少,难道就必须用PS手动去水印吗? 就当我 ...

              • QQ推出特殊模式!自动去除广告,还有超多新功能

                又双叒叕更新了. QQ这一波更新到8.3.3之后,功能又多了不少. 不多说了,小雷直接带你看有哪些新功能.  启动页终于改了,表情变多了  在更新之前,QQ的启动页是自家企鹅和一张倒影. 这冷色调的配 ...

              • 根据状态自动填充背景色并设置删除线

                前言 如何根据状态,将取消的数据行标注颜色并设置删除线,如下图所示: 数据为了保持一定的可追溯性,通常不要把暂时不要的数据彻底删除,因此我们可以加一个状态栏来描述数据的可用性,并用显著的标识给予提醒, ...

              • 洗猪大肠别只加盐,老师傅用这方法,腥臭味自动去除,又快又干净

                大图模式 村里有一家是养猪的,每年临近过年的时候,我们家和几个发小家里都是商量着买他家一头猪,然后把猪肉内脏什么的分一下.毕竟现杀的猪肉要比去集市上和超市里的新鲜多了,并且都是乡里乡亲的,价格也要比外 ...

              • 告别PS软件!5秒自动去除人像背景智能抠图

                Boss有话说 Slazzer 可以在 5 秒钟自动删除人物背景,不管您是设计师还是摄影师,让您去除人物背景变得非常轻松.只需上传图片并在几秒钟内实现去除背景.去除人物背景是非常耗时耗力的任务,但现在 ...

              • 如何批量去除word文档中的自动添加的波浪线

                在使用word文档编辑文本的时候,文档会自动在一些文本的下方标注波浪线用以提醒使用者注意.由于word文档不是十分智能,这些提醒会有一些时候错误的.如果使用者不希望看见这些红红绿绿的波浪线,可以关闭这 ...

              • 用手机去除照片中的人物,智能识别,自动填充

                用手机去除照片中的人物,智能识别,自动填充