检测颜色并从图像中删除该颜色

2024-01-07

我的图像背景为浅紫色图像,字符为深蓝色。我的目标是从图像中识别文本。所以我试图从背景中删除浅紫色,以便我的图像没有噪音,但我找不到该图像的确切颜色代码,因为它在各处都有些不同,所以我无法遮盖图像。这是我的代码

import numpy as np
from PIL import Image

im = Image.open('capture.png')

im = im.convert('RGBA')
data = np.array(im)

rgb = data[:,:,:3]
color = [27, 49, 89]   # Original value to be mask
black = [0,0,0, 255]
white = [255,255,255,255]
mask = np.all(rgb == color, axis = -1)
data[mask] = black
data[np.logical_not(mask)] = white

new_im = Image.fromarray(data)
new_im.save('new_file.png')

所以我想如果我可以删除所有特定颜色范围内的颜色,例如 [R:0-20,G:0-20,B:80-100] 也许会起作用。有人可以告诉我我该怎么做吗?

任何其他解决此问题的建议也将不胜感激。


由于文本和背景似乎有明显的阴影,因此颜色阈值应该在这里起作用。这个想法是将图像转换为 HSV 格式,然后使用下限和上限阈值生成二进制分段掩码,然后按位提取文本。这是使用 Python OpenCV 的实现


使用这个下限和上限阈值,我们获得这个掩码

lower = np.array([0, 120, 0])
upper = np.array([179, 255, 255])

然后我们按位与原始图像

最后我们阈值得到一个二值图像,前景文本为黑色,背景为白色

import numpy as np
import cv2

# Color threshold
image = cv2.imread('1.png')
original = image.copy()
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower = np.array([0, 120, 0])
upper = np.array([179, 255, 255])
mask = cv2.inRange(hsv, lower, upper)
result = cv2.bitwise_and(original,original,mask=mask)
result[mask==0] = (255,255,255)

# Make text black and foreground white
result = cv2.cvtColor(result, cv2.COLOR_BGR2GRAY)
result = cv2.threshold(result, 0, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY)[1]

cv2.imshow('mask', mask)
cv2.imshow('result', result)
cv2.waitKey()

您可以使用此 HSV 颜色阈值脚本来确定阈值下限和上限

import cv2
import sys
import numpy as np

def nothing(x):
    pass

# Load in image
image = cv2.imread('1.png')

# Create a window
cv2.namedWindow('image')

# create trackbars for color change
cv2.createTrackbar('HMin','image',0,179,nothing) # Hue is from 0-179 for Opencv
cv2.createTrackbar('SMin','image',0,255,nothing)
cv2.createTrackbar('VMin','image',0,255,nothing)
cv2.createTrackbar('HMax','image',0,179,nothing)
cv2.createTrackbar('SMax','image',0,255,nothing)
cv2.createTrackbar('VMax','image',0,255,nothing)

# Set default value for MAX HSV trackbars.
cv2.setTrackbarPos('HMax', 'image', 179)
cv2.setTrackbarPos('SMax', 'image', 255)
cv2.setTrackbarPos('VMax', 'image', 255)

# Initialize to check if HSV min/max value changes
hMin = sMin = vMin = hMax = sMax = vMax = 0
phMin = psMin = pvMin = phMax = psMax = pvMax = 0

output = image
wait_time = 33

while(1):

    # get current positions of all trackbars
    hMin = cv2.getTrackbarPos('HMin','image')
    sMin = cv2.getTrackbarPos('SMin','image')
    vMin = cv2.getTrackbarPos('VMin','image')

    hMax = cv2.getTrackbarPos('HMax','image')
    sMax = cv2.getTrackbarPos('SMax','image')
    vMax = cv2.getTrackbarPos('VMax','image')

    # Set minimum and max HSV values to display
    lower = np.array([hMin, sMin, vMin])
    upper = np.array([hMax, sMax, vMax])

    # Create HSV Image and threshold into a range.
    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    mask = cv2.inRange(hsv, lower, upper)
    output = cv2.bitwise_and(image,image, mask= mask)

    # Print if there is a change in HSV value
    if( (phMin != hMin) | (psMin != sMin) | (pvMin != vMin) | (phMax != hMax) | (psMax != sMax) | (pvMax != vMax) ):
        print("(hMin = %d , sMin = %d, vMin = %d), (hMax = %d , sMax = %d, vMax = %d)" % (hMin , sMin , vMin, hMax, sMax , vMax))
        phMin = hMin
        psMin = sMin
        pvMin = vMin
        phMax = hMax
        psMax = sMax
        pvMax = vMax

    # Display output image
    cv2.imshow('image',output)

    # Wait longer to prevent freeze for videos.
    if cv2.waitKey(wait_time) & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检测颜色并从图像中删除该颜色 的相关文章

随机推荐

  • Ocaml 多态记录类型不太通用

    给定以下类型 type props state reactInstance props props state state updater event props state reactInstance gt event gt state
  • Cordova,在 Ubuntu 14.04 上添加 Android 平台时出现错误

    我安装了 cordova 并且可以毫无问题地创建一个新项目 但是 当我尝试添加 Android 平台时 出现以下错误 sudo cordova platform add android Running platform task Addin
  • 将字符串写入 NSPasteBoard

    我无法让这个方法返回 YES BOOL writeToPasteBoard NSString stringToWrite return pasteBoard setString stringToWrite forType NSStringP
  • 在 OS X Yosemite 上构建 binutils 的交叉编译

    我正在尝试构建 binutils 以在 Mac OS X 上生成 MIPS 代码 我找到了这个网站 http www theairportwiki com index php Building a cross compile of GCC
  • 如何使用 Moment.js 从日期中删除时间?

    formatCalendarDate function dateTime return moment utc dateTime format LLL 它显示 2013 年 2 月 28 日 09 24 但我想删除最后的时间 我怎样才能做到这
  • 如何在asdict中获取@property方法?

    我有类似的东西 from attr import attrs attrib attrs class Foo max count attrib property def get max plus one self return self ma
  • 库未加载 @rpath/AFNetworking iOS

    使用自定义 我自己创建的 框架将我的应用程序安装到设备上时 我遇到了非常奇怪的问题 MyFramework 使用 AFNetworking Dropbox 和 Google Drive 我只是将 MyFramework 拖到我的应用程序中并
  • 按列和最大日期分组时如何选择单行?

    我有以下数据想要过滤 所以我只根据第一列的分组得到一行并选择最大日期 co2 包含独特的值 col1 col2 date 1 123 2013 1 124 2012 1 125 2014 2 213 2011 2 214 2015 2 21
  • 我需要多个 EVP_CIPHER_CTX 结构吗?

    我有一个单线程客户端 服务器应用程序 需要对其网络通信进行加密和解密 我计划使用 OpenSSL 的 EVP API 和 AES 256 CBC 我从几个例子中找到了一些示例伪代码 key is 256 bits 32 bytes when
  • Vbscript列出文件夹和子文件夹中的所有PDF文件

    好吧 这是我的代码 但我无法使用 objFile Extension 过滤列表 我确信这很愚蠢 Set objFSO CreateObject Scripting FileSystemObject objStartFolder C dev
  • 了解 Vulkan 统一布局的“集合”索引

    我一直在关注 非常棒的 nvpro 光线追踪教程 并且对使用 CameraProperties 统一缓冲区的绑定方式有疑问layout binding 0 set 1 我理解绑定 0 但为什么设置 1 教程中说 set 1来自以下事实 它是
  • 导入错误:没有名为 cv2.cv 的模块

    python 3 5 和 Windows 10 我使用以下命令安装了 open cv pip install opencv python 3 1 0 cp35 cp35m win amd64 whl 这个命令在 python 中工作正常 i
  • 是否有与 git archive 相反的命令用于导入 zip 文件

    在主要修订正式纳入 大 公司 SCM 系统之前 我们的本地工作流程倾向于使用一系列 zip 文件作为本地 源代码控制 我正在尝试引入 git 作为一种更好的本地 SCM 方法 当前的工作流程对于我们的小团队来说非常有效 特别是当测试机器离线
  • Visual Studio 2015 中缺少 Xamarin 空白应用程序(本机)模板

    我已经在 Visual Studio 2015 中安装了使用 Xamarin 进行开发的所有工具 但不知何故 当我创建新项目时 我没有看到空白应用程序 本机 模板 我只能使用空白应用程序 Xamarin Forms 模板 我已经尝试重新安装
  • 如何对 Symfony2 控制器进行单元测试?

    我想尽可能多地使用测试驱动开发 这是一种很好的工作方式 我对 Symfony2 控制器创建并返回一个新的事实感到困扰Response object 我希望能够对控制器进行单独的单元测试 你怎么做呢 答案是创建一个控制器作为普通旧 PHP 对
  • SQL Server 更改计算列

    有谁知道如何更改计算列而不删除 SQL Server 中的列 我想停止使用该列作为计算列并开始直接在列中存储数据 但希望保留当前值 这可能吗 据我所知 但这是你可以做的事情 添加另一列到表中 使用计算列的值更新该列 然后删除计算列
  • 使用 Python 将 BMP/PNG/JPEG 转换为 SVG 文件

    我目前正在尝试使用 Python 将 BMP 文件转换为 SVG 文件 我正在尝试找到一个 Python 库 使我能够将 BMP PNG JPEG 文件转换为 SVG 文件 我已经尝试过使用 Potrace 但质量很糟糕 我需要相当高质量的
  • 不同文件夹中的文件具有相同的命名空间

    我正在尝试构建一个项目 以便自动生成的一些代码位于子文件夹中generated 但它与父目录中的文件具有相同的命名空间 例如 我有这个结构 它给了我错误PHP Fatal error Uncaught Error Class MyProje
  • 将文本字符串中的任何 url 替换为可单击的 php 链接

    假设我有一串文本 例如 text Hello world be sure to visit http whatever com today 我如何 可能使用正则表达式 插入链接的锚标记 将链接本身显示为链接文本 您可以使用正则表达式来执行此
  • 检测颜色并从图像中删除该颜色

    我的图像背景为浅紫色图像 字符为深蓝色 我的目标是从图像中识别文本 所以我试图从背景中删除浅紫色 以便我的图像没有噪音 但我找不到该图像的确切颜色代码 因为它在各处都有些不同 所以我无法遮盖图像 这是我的代码 import numpy as