如何使用opencv丢弃图像的边缘?

2024-02-03

我正在预处理一些图像,以便从我感兴趣的区域中删除背景。然而,由于相机的焦点,我的长凳上的图像边缘呈圆形。如何丢弃这些圆角边缘并能够仅从图像中删除我感兴趣的对象?下面的代码我可以删除图像的背景,但由于周围的边缘,它无法正常工作。

import numpy as np
import cv2

#Read the image and perform threshold and get its height and weight
img = cv2.imread('IMD408.bmp')
h, w = img.shape[:2]

# Transform to gray colorspace and blur the image.
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray,(5,5),0)

# Make a fake rectangle arround the image that will seperate the main contour.
cv2.rectangle(blur, (0,0), (w,h), (255,255,255), 10)

# Perform Otsu threshold.
_,thresh = cv2.threshold(blur,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)

# Create a mask for bitwise operation
mask = np.zeros((h, w), np.uint8)

# Search for contours and iterate over contours. Make threshold for size to
# eliminate others.
contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)

for i in contours:
    cnt = cv2.contourArea(i)
    if 1000000 >cnt > 100000:
        cv2.drawContours(mask, [i],-1, 255, -1)


# Perform the bitwise operation.
res = cv2.bitwise_and(img, img, mask=mask)

# Display the result.
cv2.imwrite('IMD408.png', res)
cv2.imshow('img', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

input image: enter image description here

Exit: enter image description here

Error: enter image description here


Since you mentioned that all the images have the same hue, then this should work well for them. Steps is to do some white balancing which will increase the contrast a bit. enter image description here

Get the greyscale. enter image description here

灰度图像的阈值。小于 127 的值设置为 255(白色)。这将为您提供一个二值图像,它将成为原始图像的掩模。

enter image description here Apply the mask

如果您想要更好的结果,您可能需要使用阈值,这是link https://docs.opencv.org/3.4/d7/d4d/tutorial_py_thresholding.html为了那个原因。但这应该让你开始。我使用的是不同的 OpenCV 版本,您可能需要稍微调整一下代码。

import cv2

def equaliseWhiteBalance(image):
    ''' Return equilised WB of an image '''
    wb = cv2.xphoto.createSimpleWB()                        #Create WB Object
    imgWB = wb.balanceWhite(img)                            #Balance White on image
    r,g,b = cv2.split(imgWB)                                #Get individual r,g,b channels
    r_equ  = cv2.equalizeHist(r)                            #Equalise RED channel
    g_equ  = cv2.equalizeHist(g)                            #Equalise GREEN channel
    b_equ  = cv2.equalizeHist(b)                            #Equalise BLUE channel
    img_equ_WB = cv2.merge([r_equ,g_equ,b_equ])             #Merge equalised channels
    return imgWB

#Read the image
img = cv2.imread('IMD408.bmp')
result = img.copy()

#Get whiteBalance of image
imgWB = equaliseWhiteBalance(img)

cv2.imshow('img', imgWB)
cv2.waitKey(0)

# Get gray image
gray = cv2.cvtColor(imgWB,cv2.COLOR_RGB2GRAY)
cv2.imshow('img', gray)
cv2.waitKey(0)

# Perform threshold
_, thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
cv2.imshow('img', thresh)
cv2.waitKey(0)

# Apply mask
result[thresh!=0] = (255,255,255)

cv2.imshow('img', result)
cv2.waitKey(0)

如果每个图像的所有暗角小插图都有不同的大小,那么我建议在二值(掩模)图像上寻找轮廓的质心。与图像任意角距离“短”的质心将是深色晕影,因此它们的值可以从黑色更改为白色。

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

如何使用opencv丢弃图像的边缘? 的相关文章

  • 通过另一个指标数据框评估一个数据框

    我有一个源数据框input df PatientID KPI Key1 KPI Key2 KPI Key3 0 1 C602 C603 C601 NaN 1 2 C605 C606 C602 NaN 2 3 75 L239 C602 NaN
  • 为什么any (True for ... if cond) 比any (cond for ...) 快得多?

    检查列表是否包含奇数的两种类似方法 any x 2 for x in a any True for x in a if x 2 计时结果与a 0 10000000 每次尝试五次 次数以秒为单位 0 60 0 60 0 60 0 61 0 6
  • 来自 Pandas DataFrame 的用户定义的 Json 格式

    我有一个 pandas dataFrame 打印 pandas DataFrame 后 结果如下所示 country branch no of employee total salary count DOB count email x a
  • Python矩阵问题[重复]

    这个问题在这里已经有答案了 这是从这个线程继续的 Python矩阵 有什么解决方案吗 https stackoverflow com questions 5835583 python matrix any solution Input fr
  • 当类的任何属性被修改时,类如何运行某些函数?

    是否有一些通用方法可以让类在以下情况下运行函数 any它的属性被修改了吗 我想知道是否可以运行某些子进程来监视类的更改 但也许有一种方法可以继承class并修改一些on change函数是 Python 类的一部分 有点像默认的 repr
  • 为什么 Numpy 创建零数组比用零替换现有数组的值要快得多?

    我有一个用于跟踪各种值的数组 数组是2500x1700尺寸上 所以不是很大 在会话结束时 我需要将该数组中的所有值重置为零 我尝试创建一个新的零数组并将数组中的所有值替换为零 并且创建一个全新的数组要快得多 代码示例 for in sess
  • 安装 Ta-lib 会产生 gcc 错误

    当我尝试在我的 mac 上将 Ta lib 作为全局包安装时 出现 gcc 错误 我收到以下错误 gcc Wno unused result Wsign compare Wunreachable code DNDEBUG g fwrapv
  • 如何在 Django Admin 中禁用事务?

    I used transaction non atomic requests for 被超越的save in Person model如下所示 store models py from django db import models fro
  • 更改散景图中选项卡的样式

    我想知道是否有办法更改散景图上生成的选项卡的属性 诸如增加文本字体 更改制表符宽度等更改 以下是用于生成具有两个选项卡的绘图的简单代码 from bokeh models widgets import Panel Tabs from bok
  • Netmiko OSError:在 send_command 中从未检测到搜索模式:

    我被这个错误困住了 任何人都可以帮助摆脱这个错误 import netmiko Device host xxxxxxxxxx device type cisco nxos username admin password xxxxxxxx c
  • 使用 Pytest 捕获 SystemExit 消息

    我正在使用 pytest 编写测试 我遇到了一些函数抛出异常的情况SystemExit如果输入错误 终端上会显示一些错误消息 我想为以下情况编写测试SystemExit抛出并验证输出错误消息中是否有特定字符串 这是代码 def test v
  • 从 Java 调用 Python 代码时出现问题(不使用 jython)

    我发现这是从 java 运行 使用 exec 方法 python 脚本的方法之一 我在 python 文件中有一个简单的打印语句 但是 我的程序在运行时什么也没做 它既不打印Python文件中编写的语句 也不抛出异常 程序什么都不做就终止了
  • 我以为 Python 通过引用传递了所有内容?

    采取以下代码 module functions py def foo input new val input new val module main py input 5 functions foo input 10 print input
  • Django populate() 不可重入

    当我尝试在生产环境中加载 Django 应用程序时 我不断收到此消息 我尝试了所有的 stackoverflow 答案 但没有任何解决办法 任何其他想法 我使用的是 Django 1 5 2 和 Apache Traceback most
  • 无法使用 Python 3 编写的 gzip.open() 将压缩文件上传到云存储

    当我尝试在 Cloud Shell 实例上使用 python 脚本将压缩的 gzip 文件上传到云存储时 它总是上传一个空文件 这是重现错误的代码 import gzip from google cloud import storage s
  • 使用 python pyad 访问对象 [] 时出现问题

    我在尝试使用 pyad 访问活动目录用户属性时遇到问题 这是我的代码 user pyad aduser ADUser from cn tuser print user get attribute lastLogonTimestamp 这些是
  • 将 PySpark RDD 作为新列添加到 pyspark.sql.dataframe

    我有一个 pyspark sql dataframe 其中每一行都是一篇新闻文章 然后我有一个 RDD 来表示每篇文章中包含的单词 我想将单词的 RDD 作为名为 单词 的列添加到我的新文章数据框中 我试过 df withColumn wo
  • 在 kivy 中嵌套小部件

    我正在尝试在 kivy 中制作一个界面 我认为即使在完成教程之后 我仍然不了解自定义小部件以及如何对它们进行层次结构的一些基本知识 我认为我有更多的盒模型 html 思维方式 因此小部件嵌套在本机 GUI 中的方式对我来说仍然有点陌生 一些
  • 使用 Python PuLP 混合整数规划的时间限制

    我一直在使用PuLP http pythonhosted org PuLP 解决我感兴趣的特定混合整数线性规划 MIP 但是 随着问题规模的增长 PuLP 花费的时间太长 我希望能够运行求解器一段时间 并在需要很长时间的情况下提前终止它 并
  • 使用自定义层运行 Keras 模型时出现问题

    我目前正在攻读学士学位论文FIIT STU https www fiit stuba sk en html page id 749 其主要目标是尝试复制和验证以下结果study http arxiv org abs 2006 00885 这

随机推荐

  • 如何可移植地扩展使用 mmap() 访问的文件

    我们正在尝试改变 SQLite 一个嵌入式数据库系统 使用 mmap 而不是通常的 read 和 write 调用来访问 磁盘上的数据库文件 对整个数据使用单个大映射 文件 假设文件足够小 我们没有问题 在虚拟内存中为此寻找空间 到目前为止
  • Keras - 从一个神经网络做出两个预测

    我正在尝试组合由同一网络产生的两个输出 该网络对 4 类任务和 10 类任务进行预测 然后我希望将这些输出组合起来 得到一个长度为 14 的数组 我将其用作最终目标 虽然这似乎很有效 但预测总是针对一个类别 因此它会产生一个概率分布 该概率
  • 如何使用 NSVisualEffectView 制作平滑、圆润、类似体积的 OS X 窗口?

    I m currently trying to make a window that looks like the Volume OS X window 为了做到这一点 我有自己的NSWindow 使用自定义子类 它是透明的 无标题栏 无阴
  • 插入到java.util.List中的任意位置

    根据文档 您可以将对象插入列表中的任何位置 该界面的用户可以精确控制每个元素在列表中的插入位置 来源 http download oracle com javase 6 docs api java util List html http d
  • 使用shared_ptr的派生类对象的向量

    我有这些课程 class Element class Button public Element class Label public Element class Input public Element 我希望能够创建一个void add
  • Chart.js:组合线形和条形数据

    我想创建一个图表Chart js http www chartjs org 包含两个不同的数据集 一个线数据集和一个条形数据集 您可以在这里查看我的完整代码 function initCombinedChart canvas each fu
  • ruby 访问静态变量

    class A ololo 1 end A ololo A new ololo NoMethodError undefined method ololo 好的 我需要一个 attr reader class B ololo 1 attr r
  • Tensorflow 安装和导入正确,但在尝试使用时抛出异常

    我在使用张量流时遇到问题 看来安装和导入正确 然而 当我调用它时 解释器会抛出一长串异常 其节略如下 我使用的是 OS X El Capitan v 10 11 6 Macbook Pro 15 英寸 2009 年中 2 8 GHz 英特尔
  • 将 Unix 移植到 Windows - pwd.h 的使用

    我正在尝试编译库尼汉 http sourceforge net projects libunihan 使用 MinGW 编写代码 但遇到了需要移植的功能 该函数的目的是获得规范的路径表示 它用pwd h 这是 POSIX 而 MinGW 不
  • 有没有办法让 Pandas ewm 在固定窗口上运行?

    我正在尝试使用熊猫 ewm 函数 https pandas pydata org pandas docs stable reference api pandas DataFrame ewm html计算指数加权移动平均线 然而我注意到信息似
  • 强制拆包的目的

    在 swift 文档中 您可以找到以下内容 if convertedNumber nil println convertedNumber has an integer value of convertedNumber prints conv
  • 如何从Web Worker调用共享Worker?

    是否可以从 Web Worker 调用 Shared Worker 你能给我举个例子吗 就我而言 我有一些网络工作者 我需要在他们之间共享一个单例服务 您可以使用类似于以下内容的技术https stackoverflow com a 307
  • TCPIP 3次握手

    为什么在 TCP 3 次握手的第 3 部分期间没有传输数据 例如 A 到 B SYN B 到 A ACK SYN A 到 B ACK 为什么数据不能与这个 ACK 一起传输 我一直认为这是为了将会话建立阶段与数据传输阶段分开 以便no传输真
  • 将排序后的 hashmap 的键值存储在 string[] 中

    我很抱歉发布这个不清楚的问题 这是我第一次使用 hashmap 因此我很困惑 试图在这里以更好的方式解释这个问题 将 hashmap 的键值存储在 string 中 https stackoverflow com questions 741
  • 如何在 JQuery 1.5.x 中延迟自动打开模态对话框窗口?

    单击以下对话框后效果很好 a href a 位于 html 底部的 javascript 触发该操作 jQuery dialogX dialog bgiframe true autoOpen false modal true 现在 我希望在
  • Azure Web App 和 Azure SQL Server 的 VNet 集成

    我有一个 Azure Web App 和一个 Azure SQL Server 它们都位于同一订阅中 它们都连接到同一 VNet 子网 如下面的快照所示 SQL Server 配置为不允许 Azure 资源和服务访问服务器 因为它应该只允许
  • 使用 Java 删除 XML 中的空标签

    我正在为 servlet 提供一些功能 我想做的一件事是 当接收 InputStream 基本上是解析为 XML 格式的 PDF 文档 时 将该数据设置为 String 对象 然后我尝试删除所有空标签 但到目前为止我还没有得到任何好的结果
  • eclipse 调试器:附加 Maven 依赖项的源代码?

    我想在 myEclipse 8 中调试我们的 web 应用程序时使用 maven 管理的依赖项的源代码 我已设法将源附加到 Maven Managed Dependency 类路径容器中的库 即当我从依赖项打开类文件时 例如使用 Ctrl
  • MongoDB db.getCollection.find 和 db.tablename.find 之间的区别?

    有什么区别 db getCollection booking find and db booking find 它们是否完全相同 或者我什么时候应该使用哪一个 db getCollection booking find id 0J0DR d
  • 如何使用opencv丢弃图像的边缘?

    我正在预处理一些图像 以便从我感兴趣的区域中删除背景 然而 由于相机的焦点 我的长凳上的图像边缘呈圆形 如何丢弃这些圆角边缘并能够仅从图像中删除我感兴趣的对象 下面的代码我可以删除图像的背景 但由于周围的边缘 它无法正常工作 import