在 python 中使用 opencv 更改图像中某个区域的颜色

2024-02-01

我有一张图片,我想将所有白色像素更改为灰色,但仅限于图像的特定区域。示例图片,我只想更改红色矩形之外的图片,而不更改红色矩形内的图像:

我已经有了通用代码,这是其他人的 Stackoverflow 问题的一部分,它改变每个白色像素的颜色,而不仅仅是一个区域之外的像素。

image = cv.imread("meme 2.jpg")
hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)

# Define lower and uppper limits of what we call "white-ish"
sensitivity = 19
lower_white = np.array([0, 0, 255 - sensitivity])
upper_white = np.array([255, sensitivity, 255])

# Mask image to only select white
mask = cv.inRange(hsv, lower_white, upper_white)

# Change image to grey where we found brown
image[mask > 0] = (170, 170, 170)
cv.imwrite(file, image)

这是在 Python/OpenCV 中执行此操作的一种方法。

  • 读取输入
  • 转换为 HSV 颜色空间
  • 制作蒙版所需颜色的阈值
  • 使用蒙版更改图像中所有相应像素的颜色
  • 为不想改变的区域绘制一个新的矩形蒙版
  • 反转您想要更改的区域的新蒙版
  • 将新蒙版应用到原始图像
  • 将反转的新蒙版应用于颜色更改的图像
  • 将两个结果加在一起形成最终图像
  • 保存结果


Input:

import cv2
import numpy as np

# Read image
image = cv2.imread('4animals.jpg')

# Convert to HSV
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# Define lower and uppper limits of what we call "white-ish"
sensitivity = 19
lower_white = np.array([0, 0, 255 - sensitivity])
upper_white = np.array([255, sensitivity, 255])

# Create mask to only select white
mask = cv2.inRange(hsv, lower_white, upper_white)

# Change image to grey where we found white
image2 = image.copy()
image2[mask > 0] = (170, 170, 170)

# Create new rectangular mask that is white on black background
x,y,w,h = 33,100,430,550
mask2 = np.zeros_like(image)
cv2.rectangle(mask2, (x,y), (x+w,y+h), (255, 255, 255), -1)

# invert mask
mask2_inv = 255 - mask2

# apply mask to image
image_masked = cv2.bitwise_and(image, mask2)

# apply inverted mask to image2
image2_masked = cv2.bitwise_and(image2, mask2_inv)

# add together
result = cv2.add(image_masked, image2_masked)

# save results
cv2.imwrite('4animals_mask.jpg', mask)
cv2.imwrite('4animals_modified.png', image2)
cv2.imwrite('4animals_mask2.jpg', mask2)
cv2.imwrite('4animals_mask2_inv.jpg', mask2_inv)
cv2.imwrite('4animals_masked.jpg', image_masked)
cv2.imwrite('4animals_modified_masked.jpg', image2_masked)
cv2.imwrite('4animals_result.jpg', result)

cv2.imshow('mask', mask)
cv2.imshow('image2', image2)
cv2.imshow('mask2', mask2 )
cv2.imshow('mask2_inv', mask2_inv)
cv2.imshow('image_masked', image_masked)
cv2.imshow('image2_masked', image2_masked)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

颜色遮罩:

矩形遮罩:

倒置矩形掩模:

颜色改变的图像:

屏蔽输入:

蒙版颜色改变图像:

Result:

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

在 python 中使用 opencv 更改图像中某个区域的颜色 的相关文章

随机推荐

  • 如何在 Netbeans 中向 Undecorated JFrame 添加阴影

    我想向 Undecorated jFrame 添加阴影 我不知道该怎么做 有人知道吗 这有点 作弊 这不会在窗口后面产生阴影 而是在内容后面产生阴影 这种方法不仅使窗口不被装饰 而且变得透明 替换的 内容窗格 被部分填充 允许阴影效果 出现
  • C# Winforms,将父对象分配给新的子对象,而不是实例化表单

    我有一个带有两个子窗体的 MDI 容器 我们被教导 MSDN 文档只给出了示例 使用关键字 this 它假设所讨论的子对象是从 MDI 容器本身创建的 如果我在 MDI 容器中创建对象 则这是正确的 Form Child2 child ne
  • 类型错误:stripe.redirectToCheckout 不是 nuxt.js 中的函数

    我正在尝试集成条纹支付网关 我有一个用于前端的 nuxt js 和一个用于后端的 adonis js 我从前端调用 api 到后端来创建checkoutSession并返回sessionID 我能够创造checkoutSession并返回s
  • 如何在matplotlib中的不同图形中使用不同颜色图显示图像?

    我想在不同的图形中使用不同的颜色贴图显示图像 以下代码使用两个不同的窗口但具有相同的颜色图显示图像 import scipy misc from pylab import a scipy misc imread lena jpg figur
  • Objective-c 上的大整数

    任何人都可以提供代码BigInteger http docs oracle com javase 8 docs api java math BigInteger htmlObjective C 中提供 PowMod 函数的实现 我希望现在回
  • 如何在 Ruby 中实现 Pubnub 存在功能

    我想知道如何在 Rails 应用程序中使用 PubNub 实现用户存在 但我没有找到有关如何在服务器端和客户端实现此功能的完整指南 使用 Ruby 和 JavaScript 实现 PubNub 存在 按照这个连接两个 PubNub SDK
  • CGContextSetBaseCTM 无效上下文 0x0

    我目前正在开发一个 Java 应用程序 由于我没有OSX我已经从该应用程序所在的论坛 社区中寻求了一些人的帮助 但是在启动应用程序时会出现此错误OSX Oct 5 15 26 58 macbook pro local java 2384
  • JSTL .tld 文件在哪里?

    我已经下载了jstl 1 1 2 jar http repo1 maven org maven2 jstl jstl 1 1 2 jstl 1 1 2 jar来自 Maven 存储库 我希望 jar 包含标签的 tld 文件 但事实并非如此
  • 对facet_grid 图的所有方面强制启用X 轴文本

    我有同样的问题该用户 https stackoverflow com questions 10913840 force x axis on both graphs in a facet grid when x values are the
  • Cocoa - 从另一个可变参数方法调用可变参数方法(NSString stringWithFormat 调用)

    我有一个问题 NSString strigWithFormat format 因为它返回一个 id 并且我有很多代码将 NSString var 更改为其他个人类型 但编译器不会阻止我在某些地方将 NSString 设置为另一种类型的对象
  • 如何使用自定义编辑器属性从任何地方获取屏幕点击输入?

    TL DR 如何使用矢量实现 Unity 的 屏幕颜色 功能 好吧 对于我想要做的事情来说 标题非常简单 让用户单击一个按钮 然后单击屏幕上的一个位置 将该 世界 位置保存为矢量 这基本上是有效的 但它不会检测到检查器之外的左键单击 禁用统
  • fancybox2 / fancybox 导致页面跳转到顶部

    我已经在开发网站上实现了 fancybox2 当我使用 fancybox 单击链接等 时 整个 html 会移到它后面 并转到顶部 我让它在另一个演示中运行良好 但是当我将相同的代码拖到这个项目时 它会跳到顶部 不仅包含内联 div 的链接
  • 保留值直到 Teradata 中的值发生变化

    Teradata中有一个交易历史表 其中余额仅在有交易时才会更改 数据如下 Cust id Balance Txn dt 123 1000 27MAY2018 123 350 31MAY2018 例如 对于 5 月 27 日的客户 123
  • 使用 StrictMode 检测 Android 上被遗忘的 SQLite 事务?

    执行多个 SQL 语句而不将它们放入一个事务中是一个严重的瓶颈 参见例如http www sqlite org faq html q19 http www sqlite org faq html q19 我还没有彻底检查 SQLite 在
  • Tkinter GUI、I/O 和线程:何时使用队列、何时使用事件?

    我正在使用 TKinter 构建一个 GUI 用于与多通道分析仪的套接字连接 以定期 约 15 秒 接收和绘制数据 约 15 000 000 个值 在接收数据时 我不希望 GUI 冻结 因此我使用多线程进行连接处理 数据接收和绘图操作 正如
  • 使用 scala 使用用户名和密码进行 SSH

    有没有一种方法可以让我们在通过 scala 代码执行 ssh 时提供用户名和密码 这是我现在正在使用的代码 但我不知道如何在 HostConfig 中提供用户和密码 SSH 采用 HostConfigProvide https github
  • 使用命令行删除逗号之间的空格

    如果我有一个像这样的文件 1050505 Some Customer 1 1 Some Order 5 6 Item 1050505 Some Customer 1 1 Some Order 5 6 Item 1050505 Some Cu
  • 创建一个可以运行的DLL

    Windows 有一个名为 rundll32 exe 的实用程序 可以将本机动态链接库作为应用程序执行 假设我有一段代码可以打印 Hello World 到控制台 是否可以用 C 最好是 Visual C 编写一个可以使用 rundll32
  • IIS 7 启用的协议

    我有一台 win 2008r2 服务器 默认网站已启用协议设置为 http net tcp 当在默认网站下创建任何新应用程序时 我希望默认具有相同的启用协议 有人可以建议如何做到这一点吗 目前 当我添加应用程序时 会创建一个仅启用 http
  • 在 python 中使用 opencv 更改图像中某个区域的颜色

    我有一张图片 我想将所有白色像素更改为灰色 但仅限于图像的特定区域 示例图片 我只想更改红色矩形之外的图片 而不更改红色矩形内的图像 我已经有了通用代码 这是其他人的 Stackoverflow 问题的一部分 它改变每个白色像素的颜色 而不