如何使用OpenCV裁剪圆形图像?

2023-12-13

我想知道 openCV 中是否有一种方法可以让我在两个圆之间裁剪图像,从而忽略较小内圆中的所有内容和较大圆之外的所有内容。就像甜甜圈的形状。


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

  • 读取输入并获取其尺寸
  • 定义两个圆的半径和圆心坐标
  • 在黑色背景上为每个半径创建一个白色实心圆形蒙版
  • 从较大半径蒙版中减去较小半径蒙版
  • 将生成的蒙版图像放入输入的 Alpha 通道中
  • 保存结果

Input:

enter image description here

import cv2
import numpy as np

# read image
img = cv2.imread('lena.jpg')
hh, ww = img.shape[:2]
hh2 = hh // 2
ww2 = ww // 2

# define circles
radius1 = 25
radius2 = 75
xc = hh // 2
yc = ww // 2

# draw filled circles in white on black background as masks
mask1 = np.zeros_like(img)
mask1 = cv2.circle(mask1, (xc,yc), radius1, (255,255,255), -1)
mask2 = np.zeros_like(img)
mask2 = cv2.circle(mask2, (xc,yc), radius2, (255,255,255), -1)

# subtract masks and make into single channel
mask = cv2.subtract(mask2, mask1)

# put mask into alpha channel of input
result = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
result[:, :, 3] = mask[:,:,0]

# save results
cv2.imwrite('lena_mask1.png', mask1)
cv2.imwrite('lena_mask2.png', mask2)
cv2.imwrite('lena_masks.png', mask)
cv2.imwrite('lena_circle_masks.png', result)

cv2.imshow('image', img)
cv2.imshow('mask1', mask1)
cv2.imshow('mask2', mask2)
cv2.imshow('mask', mask)
cv2.imshow('masked image', result)
cv2.waitKey(0)
cv2.destroyAllWindows()


较小半径掩模:

enter image description here

较大半径掩模:

enter image description here

差异掩模:

enter image description here

结果图像:

enter image description here

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

如何使用OpenCV裁剪圆形图像? 的相关文章

  • 下载 PyQt6 的 Qt Designer 并使用 pyuic6 将 .ui 文件转换为 .py 文件

    如何下载 PyQt6 的 QtDesigner 如果没有适用于 PyQt6 的 QtDesigner 我也可以使用 PyQt5 的 QtDesigner 但是如何将此 ui 文件转换为使用 PyQt6 库而不是 PyQt5 的 py 文件
  • 如何在刻度标签和轴之间添加空间

    我已成功增加刻度标签的字体 但现在它们距离轴太近了 我想在刻度标签和轴之间添加一点呼吸空间 如果您不想全局更改间距 通过编辑 rcParams 并且想要更简洁的方法 请尝试以下操作 ax tick params axis both whic
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • Pandas Dataframe 中 bool 值的条件前向填充

    问题 如何转发 fill boolTruepandas 数据框中的值 如果是当天的第一个条目 True 到一天结束时 请参阅以下示例和所需的输出 Data import pandas as pd import numpy as np df
  • Geopandas 设置几何图形:MultiPolygon“等于 len 键和值”的 ValueError

    我有 2 个带有几何列的地理数据框 我将一些几何图形从 1 个复制到另一个 这对于多边形效果很好 但对于任何 有效 多多边形都会返回 ValueError 请指教如何解决这个问题 我不知道是否 如何 为什么应该更改 MultiPolygon
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • Python - 在窗口最小化或隐藏时使用 pywinauto 控制窗口

    我正在尝试做的事情 我正在尝试使用 pywinauto 在 python 中创建一个脚本 以在后台自动安装 notepad 隐藏或最小化 notepad 只是一个示例 因为我将编辑它以与其他软件一起使用 Problem 问题是我想在安装程序
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • 如何在 Django 中使用并发进程记录到单个文件而不使用独占锁

    给定一个在多个服务器上同时执行的 Django 应用程序 该应用程序如何记录到单个共享日志文件 在网络共享中 而不保持该文件以独占模式永久打开 当您想要利用日志流时 这种情况适用于 Windows Azure 网站上托管的 Django 应
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar

随机推荐

  • 为什么我的日志位于 std 命名空间中?

    在下面的代码中 我定义了一个简单的log功能 在main I try not调用它 我打电话std log 尽管如此 我自己的log叫做 我看到 日志 在屏幕上 有谁知道为什么 我使用 G 4 7 和 clang 3 2 include
  • jsTree 在 IE8 中的显示缺陷

    我一直在使用 jsTree 并在 IE8 中遇到问题 所有数据都在树中正确显示 但是当我尝试折叠树的分支时 它无法正确显示 也就是说 发生了平滑的折叠动画 但随后数据在不应该可见的时候再次可见 相同的代码在 Firefox 3 6 27 和
  • 如何在Google电子表格中记录删除事件[重复]

    这个问题在这里已经有答案了 我需要使用 Google Apps 脚本在 Google 电子表格中记录删除事件 删除单元格或整行 并获取单元格编号和用户名 功能onEdit e 在编辑单元格时触发 而不是在删除单元格时触发 function
  • IntelliJ 中 Github 推送失败

    我使用我的新 github 帐户在我的项目中通过 github MacOS 桌面创建了 2 个存储库 但是当我尝试通过 IntelliJ 推送提交时 出现 403 错误 但我可以在 github Desktop 中成功推送 远程 aui C
  • 使用enable_if选择类构造函数[重复]

    这个问题在这里已经有答案了 考虑以下代码 include
  • 如何制作可折叠丝带?

    我正在寻找一种对可折叠丝带进行编程的方法 所以我这里有这段代码 ribbon position absolute top 20px right 0 padding 15px ribbon content position relative
  • 使用 Selenium 访问 Shadow DOM 树

    是否可以使用 Selenium Chrome webdriver 访问 Shadow DOM 中的元素 正如预期的那样 使用普通的元素搜索方法不起作用 我已经看到了对切换到子树w3c 上的规范 但找不到任何实际的文档 示例等 有人在这方面取
  • Networkx:绘制平行边

    使用以下代码从数据框中绘制图表 import pandas as pd import networkx as nx df pd DataFrame id emp 13524791000109 12053850000137 470782100
  • 禁用所有移动设备中的滚动

    这听起来好像互联网上应该有一个解决方案 但我不知道为什么我找不到它 我想禁用移动设备上的水平滚动 基本上试图实现这一目标 body overflow x hidden disable horizontal scrolling 这可能是相关信
  • 在matlab中将链接插入图像?

    我想在 matlab 中的图像中添加指向文档的链接 我有一个特定的区域 我想放置链接 例如 我希望图像中 x 40 y 120 处的位置有文档地址的链接 类似于下面的内容 我知道这不是正确的 matlab 代码 text 40 120 a
  • Qt和gcov,不生成覆盖率文件

    我正在尝试获取我为 Arora 浏览器编写的组件的代码覆盖率 该组件是使用 C 和 Qt 框架编写的 我无法使用 gcov 程序 无论是在 Gnu Linux 还是 Mac Os X 下 我尝试了在互联网上找到的所有内容 还通过强制自动编辑
  • Heroku rake db:migrate 不创建表 (Rails 5)

    我有一个 Rails 5 应用程序 我想销毁并重建我的实时数据库 网站尚未启动 所以我遵循了应该有效的步骤 它们过去曾经有效 heroku pg 重置 HEROKU POSTGRESQL HEROKUCOLOR URL confirm 应用
  • 如何在javascript中获取该元素的innerHTML?

    很简单的问题 我有一个元素 标签 它有一个 onclick 来调用 JavaScript 函数 除此之外 我希望这个函数能够回显调用它的元素的innerHTML 因此 在这种情况下 atag 的innerHTML 我该怎么做呢
  • 如何为组创建属性并在 hdf5 文件系统中访问它们?

    我想在 hdf5 文件中创建两个组 第一组 h5md团体简介和 颗粒 脂质组组2描述 前者仅包含一个直接属性 版本 1 0 和两个组创建者和作者及其属性 因此这里没有数据集 在 粒子 脂质组中 唯一缺少的部分是盒子组盒组说明 最少的信息是两
  • 如何围绕任意点旋转一组 2D 形状

    我正在创建一个 Body 类 它将一堆 2D 形状组合在一起 形成一个可移动 可旋转的主体 我需要知道的是如何旋转每个单独的形状 使其看起来像是整个身体都在旋转 而不是每个形状都围绕其中心旋转 我不能只是将每个形状的旋转中心更改为同一点 因
  • 带有开始和停止按钮的 Google Sheets 秒表

    我是 Google Apps Script 和 Java 的初学者 但我需要 Google Sheets 中的秒表 具有启动和停止功能 理想情况下 该按钮应该是一个切换按钮 这样我只需一个按钮即可启动和停止秒表 并且应该显示时间 有人可以帮
  • sizeToFit() 返回错误的高度 - 需要在 heightForRow 中查找单元格宽度

    我正在尝试根据内容制作具有动态单元格高度的 UITableView 我的应用程序是一个文章查看器 我尝试用这些函数计算单元格的高度 func heightForView text String font UIFont width CGFlo
  • 设置货币格式而不进行四舍五入

    我需要将十进制数字格式化为货币 但我不希望在此过程中发生任何舍入 例如 示例文化是 en US Dim money 1234 556789D money ToString C Yields 1 234 56 notice the round
  • 给定 N 个整数的绝对值,找到 N/2 个负值和 N/2 个正值的组合,其总和最接近 0

    假设我有一个包含 10 个数字的数组 其绝对值范围可以从 1 到 10 值可以重复 这方面的一个例子可能是 2 4 2 6 9 10 1 7 6 3 我们可以为每个数字分配一个正号或负号 但每个组合中应该始终有 5 个负数和 5 个正数 例
  • 如何使用OpenCV裁剪圆形图像?

    我想知道 openCV 中是否有一种方法可以让我在两个圆之间裁剪图像 从而忽略较小内圆中的所有内容和较大圆之外的所有内容 就像甜甜圈的形状 这是在 Python OpenCV 中执行此操作的一种方法 读取输入并获取其尺寸 定义两个圆的半径和